gpt4 book ai didi

haskell - 如何删除琐碎的参数?

转载 作者:行者123 更新时间:2023-12-02 05:40:23 25 4
gpt4 key购买 nike

我有一个定义如下的函数:

errorWhenNothing :: Maybe a -> M (Maybe a) -- M is a Monad
errorWhenNothing Nothing = throwError "is Nothing!"
errorWhenNothing m = return m

参数 m 看起来微不足道,删除它会使函数更简单、更紧凑。问题是我不能将第二个定义重写为

errorWhenNothing = return

GHC 提示 'errorWhenNothing' 的方程有不同数量的参数..

我想知道有没有办法删除m

最佳答案

是的,同一函数的不同子句不能有不同数量的参数。它主要是为了捕获在其中一行中遗漏参数的常见错误,因此它不会出现令人困惑的类型错误,而是直接告诉您您做错了什么。

如果你不想要那里的 m,你可以使用 maybe 消除器让整个事情变得无意义

errorWhenNothing :: Maybe a -> M a
errorWhenNothing = maybe (throwError "isNothing!") return

这是否是一种改进是一个见仁见智的问题。

关于haskell - 如何删除琐碎的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48595326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com