gpt4 book ai didi

haskell - 标准库中是否有 (a -> b) -> ((Maybe a) -> (Maybe b)) 转换器?

转载 作者:行者123 更新时间:2023-12-02 14:50:54 28 4
gpt4 key购买 nike

我刚开始学习 Haskell,我发现自己正在为家庭作业编写这段代码:

eval :: ExprT -> Integer
eval (Lit x) = x
eval (Add x y) = (eval x) + (eval y)
eval (Mul x y) = (eval x) * (eval y)

evalMayBe :: Maybe ExprT -> Maybe Integer
evalMayBe Nothing = Nothing
evalMayBe (Just x) = Just (eval x)

第二个功能似乎有点多余,所以我写了一个转换器:

toMayBe :: (a -> b) -> Maybe a -> Maybe b
toMayBe _ Nothing = Nothing
toMayBe f (Just x) = Just (f x)

然后像这样重写函数

evalMayBe :: Maybe ExprT -> Maybe Integer
evalMayBe = toMayBe eval

但后来我认为这个转换器似乎对很多不同的情况都非常有用,它一定在某个地方的标准库中 - 然而,我找不到它。

它在标准库中吗?编写这样的代码的“正确”方法是什么,您必须将函数链接到链中的值上,而这些值可能是 Maybe?

最佳答案

是的,这是fmap。以后你可以通过转储函数的类型来自己发现这种东西 into Hoogle ,它给出 fmap 作为您建议的类型的第一个结果。

关于haskell - 标准库中是否有 (a -> b) -> ((Maybe a) -> (Maybe b)) 转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55774103/

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