是(a - > b) - >((也许是) - >(也许是b))标准库中的转换器?

问题描述 投票:1回答:1

我刚刚学习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?

haskell maybe
1个回答
7
投票

是的,这是fmap。你可以通过转储函数into Hoogle的类型来为自己发现这种事情,它将fmap作为你提出的类型的第一个结果。

© www.soinside.com 2019 - 2024. All rights reserved.