Mad*_*ote 0 null haskell if-statement void
有没有办法像(伪代码)这样的构造:
test (a,b) = if a > 10 then a else null
Run Code Online (Sandbox Code Playgroud)
在哈斯克尔。如果您映射一个列表,我可以使用它filter来执行此操作,但我希望使用if then else.
Haskell 没有空引用,但这并不意味着您不能对值的存在或不存在进行建模。您通常Maybe为此使用类型,将数据构造函数Just用于值而Nothing不是 null。
你可以这样写你的函数:
test (a,b) = if a > 10 then Just a else Nothing
Run Code Online (Sandbox Code Playgroud)
以下是与它交互的方法:
Prelude> test (11, "foo")
Just 11
Prelude> test (10, "foo")
Nothing
Run Code Online (Sandbox Code Playgroud)
函数类型为:
test :: (Ord a, Num a) => (a, b) -> Maybe a
Run Code Online (Sandbox Code Playgroud)
它遵守 thethen和elsebranch 都返回相同类型的值的规则——在这种情况下,类型是Maybe a。