Haskell 我可以将函数限制为数据类型中的特定构造函数吗?
假设我有这样一个函数:Haskell 我可以将函数限制为数据类型中的特定构造函数吗?,haskell,Haskell,假设我有这样一个函数: myFunction::可能是a->b 但是用Nothing来调用它没有任何意义--只是一个是唯一有意义的值。是否可以在myFunction的类型定义中表示此约束 我知道我总能做到以下几点,但对我来说,这似乎不是很干净: myFunction Nothing=未定义 但是,把它称为“零”是没有任何意义的——只有a是唯一有意义的价值观 这意味着您正在查找myFunction::a->b 顺便说一句,那个些只能将一组特定类型值映射到其他类型值的函数并不是完整的。如果您使用
myFunction::可能是a->b
但是用Nothing
来调用它没有任何意义--只是一个是唯一有意义的值。是否可以在myFunction
的类型定义中表示此约束
我知道我总能做到以下几点,但对我来说,这似乎不是很干净:
myFunction Nothing=未定义
但是,把它称为“零”是没有任何意义的——只有a是唯一有意义的价值观
这意味着您正在查找myFunction::a->b
顺便说一句,那个些只能将一组特定类型值映射到其他类型值的函数并不是完整的。如果您使用它们,您总是有可能最终得到一个未定义的
。在这种特殊情况下,它看起来像是多余的缺乏纯度
此外,还有一个分部函数可以将可能是一个
转换为一个
,并为无
引发异常。和myFunction。fromJust
是::可能是a->b
但是,把它称为“零”是没有任何意义的——只有a是唯一有意义的价值观
这意味着您正在查找myFunction::a->b
顺便说一句,那个些只能将一组特定类型值映射到其他类型值的函数并不是完整的。如果您使用它们,您总是有可能最终得到一个未定义的
。在这种特殊情况下,它看起来像是多余的缺乏纯度
此外,还有一个分部函数可以将可能是一个
转换为一个
,并为无
引发异常。和myFunction。fromJust
is::也许a->b
谢谢你的回复。然而,我想我选择了一个非常糟糕的例子:我遇到的实际问题不是“可能”,而是一个自定义数据类型。我将重新措辞这个问题。为此道歉!因此,您希望有一个类似于myFunction::Just a->b
的函数,并在编译时检查它是否仅用于Just
值?不要认为在当前的大学里这是可能的,使用fmap
而不是fromJust
:fmap(myFunction::a->b)::也许a->也许b
@GabrielGonzalez是的,fromJust
这里只是为了满足所要求的:也许a->b
签名,这显然是不安全的,谢谢你的回复。然而,我想我选择了一个非常糟糕的例子:我遇到的实际问题不是“可能”,而是一个自定义数据类型。我将重新措辞这个问题。为此道歉!因此,您希望有一个类似于myFunction::Just a->b
的函数,并在编译时检查它是否仅用于Just
值?不要认为这在当前的宇宙中是可能的使用fmap
而不是从just
:fmap(myFunction::a->b)::也许a->也许b
@GabrielGonzalez是的,fromJust
这里只是为了满足所请求的::也许a->b
签名显然是未经验证的,而不是编辑问题来完全改变它的意义,你应该接受你已经收到的原始问题的限定答案,并在新的线程中询问另一个问题。请这样做。您将在编辑历史记录中找到更新的问题。在此期间,我将其回滚。与其编辑问题以完全改变其意义,您应该接受您已经收到的原始问题的限定答案,并在新的线程中询问另一个问题。请这样做。您将在编辑历史记录中找到更新的问题。在此期间,我已将其回滚。