gpt4 book ai didi

haskell - 如何使用 >>= 运算符编写以下函数

转载 作者:行者123 更新时间:2023-12-01 07:30:22 27 4
gpt4 key购买 nike

如何使用 >>= 运算符编写此函数?

parseNumber2 :: Parser LispVal
parseNumber2 = do x <- many1 digit
return $ (Number . read) x

最佳答案

do-notation 的直接脱糖给出

parseNumber2 :: Parser LispVal
parseNumber2 = many1 digit >>= (return . Number . read)

但更惯用的方法是使用 fmap或等效的 <$>来自 Control.Applicative 的运算符
parseNumber2 = Number . read <$> many1 digit

脱糖符号:
  • 翻转任何<-绑定(bind)到右侧并添加 >>=和一个 lambda 抽象
    do x <- a
    y <- b
    ...

    变成
    a >>= \x ->
    b >>= \y ->
    ...
  • 对于任何不具约束力的表格,请添加 >>在右侧:
    do a
    b
    ...

    变成
    a >>
    b >>
    ...
  • 留下最后一个表达式。
    do a

    变成
    a

  • 将这些规则应用于您的代码,我们得到
    parseNumber2 =
    many1 digit >>= \x ->
    return $ (Number . read) x

    做一些简化
    parseNumber2 = many1 digit >>= \x -> (return . Number . read) x
    parsenumber2 = many1 digit >>= (return . Number . read)

    现在,对于任何单子(monad), fmap<$>可以定义为
    f <$> x = x >>= (return . f)

    使用它来获得惯用的形式
    parseNumber2 = Number . read <$> many1 digit

    关于haskell - 如何使用 >>= 运算符编写以下函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818377/

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