繁体   English   中英

Haskell Parser fmap澄清

[英]Haskell Parser fmap clarification

我在理解以下fmap实例时遇到了麻烦。有人可以解释一下fmap的作用(在这种情况下)以及如何使用它吗? 还是写得少些混淆? 谢谢!

newtype Parser a = P { getParser :: String -> Maybe (a, String) }

instance Functor Parser where
    fmap f (P p) = P $ \s -> fmap (applyToFirst f) $ p s

{-|
    Applies a function to the first component of a pair.
-}
applyToFirst :: (a -> b) -> (a, c) -> (b, c)
applyToFirst f (x, y) = (f x, y)

它有什么作用?

它将解析器X转换为解析器Y,其中Y执行以下操作:运行解析器X并将函数f应用于解析结果对的第一个元素。

如何使用它?

p1 :: Parser String
p1 = P (\s -> Just ("foo", "bar"))

p2 :: Parser String
p2 = fmap (\s -> s ++ s) p1

现在(getParser p2) "whatever"等于Just ("foofoo", "bar")

可以减少混淆吗?

实际上并没有混淆。 Haskell需要时间来习惯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM