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

Gus*_*rea 0 haskell

假设我有这样的函数:

myFunction :: Maybe a -> b
Run Code Online (Sandbox Code Playgroud)

但是用它来称呼是没有任何意义的Nothing- Just a是唯一有意义的价值观.是否可以在类型定义中表示此约束myFunction

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

myFunction Nothing = undefined
Run Code Online (Sandbox Code Playgroud)

ДМИ*_*КОВ 5

但是用Nothing来称呼它是没有任何意义的 - 只有a是唯一有意义的值

这意味着你在寻找myFunction :: a -> b.

顺便说一下,只能将特定的一组类型值映射到其他东西的函数不是完全的.如果你使用它们,你总是冒险结束undefined.在这种特殊情况下,它似乎缺乏纯度.

此外,有一个部分函数fromJust可以转换Maybe aa和抛出异常Nothing.而myFunction . fromJust:: Maybe a -> b.