给定以下部分函数(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
的输出是什么意思?
答案 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