我可以将函数限制为数据类型中的特定构造函数吗?

时间:2013-11-21 23:40:29

标签: haskell

假设我有这样的功能:

myFunction :: Maybe a -> b

但是用Nothing调用它是没有任何意义的 - Just a是唯一有意义的值。是否可以在myFunction

的类型定义中表示此约束

我知道我总能做到以下几点,但对我来说似乎不太干净:

myFunction Nothing = undefined

1 个答案:

答案 0 :(得分:5)

  

但用Nothing称之为没有任何意义 - 只有a是唯一有意义的值

这意味着您正在寻找myFunction :: a -> b

顺便说一下,只能将特定的一组类型值映射到其他东西的函数不是完全的。如果您使用它们,则总是冒险使用undefined。在这种特殊情况下,它看起来像是多余的纯度。

此外,还有一个部分功能fromJust可以将Maybe a转换为a并抛出Nothing的异常。 myFunction . fromJust:: Maybe a -> b