了解部分函数的输出

时间:2017-02-27 03:12:08

标签: function idris

给定以下部分函数(var options = { reload: false }; 输入没有输出):

Nothing

REPL显示以下内容:

f : Maybe Int -> Maybe Int
f (Just 42) = Just 42

*Lecture> f $ Just 42 Just 42 : Maybe Int *Lecture> f Nothing f Nothing : Maybe Int 的输出是什么意思?

1 个答案:

答案 0 :(得分:2)

Idris不会减少涉及调用部分函数而没有匹配模式的表达式。换句话说,这只是REPL呈现未定义或"底部"的方式。值。假设您在可执行文件中进行调用,那么您将收到运行时错误。

来自the tutorial

  

虽然[部分功能]类型检查和编译,但它不会减少(也就是说,对函数的评估会导致它改变):

-- Unsafe head example!
unsafeHead : List a -> a
unsafeHead (x::xs) = x

unsafe> the Integer $ unsafeHead [1, 2, 3]
1 : Integer
unsafe> the Integer $ unsafeHead []
unsafeHead [] : Integer