代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

“>>=”是否可以被视为等价且隐式地使用其他函数参数来处理可选情况?

  •  -1
  • Tim unnamed eng  · 技术社区  · 7 年前

    >>= 有类型 m a -> (a -> m b) -> m b

    ma :: m a f :: a -> m b .

    这项研究的目的是什么 >>= :: m a -> (a -> m b) -> m b 更多关于:

    • 或者能够隐式解包 文学硕士 a f::a->文学硕士 你能申请吗?
    • 或者能够根据不同的情况处理不同的案件 文学硕士 的许多实现 >>= ma 看看 a <- ma; f a . 如果没有,那就用它做点别的 g ma 哪里 g :: m a -> m b a是正确的吗 更具体 还是 相等的 >> 会有一个类型 m a -> (a ->m b) -> (... -> m b) -> m b 哪里 ... -> m b g 在上面 如果是,类型是什么 ... ? 是吗 m a 对的

    • 或者两者都有?

    0 回复  |  直到 7 年前
        1
  •  1
  •   Will Ness Derri Leahy    5 年前

    ma >>= k k a 价值低于 m 包装以及如何包装涉及根据第一个参数处理不同的情况。

    这个 type "mandala" 对于 ma >>= k = join (fmap k ma)

        m   a                   -- ma
            a  ->   m b         -- k
        m          (m b)        -- after fmap
       ------------------
        m             b         -- after join
    

    k :: a -> m b 确实适用于 m a , .

    检查 ma 你提到的是一个正交问题。如果 是一种求和类型, >>= 我是 . 例如 Nothing 还有这个类型 Maybe a ,即使没有具体的 A. 价值观“内”。

    二者都 Just x 案件由同一机构处理 <- (或同等地) >> ),

        do { a <- ma ; foo a }  ==  ma >>= (\a -> foo a)
                                ==  (\case Nothing -> Nothing ;
                                           Just a  -> (\a -> foo a) a) ma
    

    第二种选择的另一部分是对链接可能性的思考。

    使用所谓的“Kleisli合成”

    (f >=> g) x  =  f x >>= g
    

       f  >=>  g  >=>  ...  >=>  h
    ------------------------------------
     a -> m b
            b -> m c
                      ......
                               s -> m t
    ------------------------------------
     a ->                           m t
    

    >> >=> 二进制的 N -多层次的业务链;但基本的初等运算符是二进制的。

    这类似于使用二进制运算符形成的列表 (:)

    [a,b,c,...,n]  =  a : (b : (c : ... (n : []) ...))