我正在从“Learn You a Haskell for Great Good!”一书中学习 monads。米兰利波卡。我试图了解单子的结合律。从本质上讲,法律规定,当您拥有一串带有 的单子函数应用程序时>>=
,它们的嵌套方式无关紧要。
以下代码使人们能够将类型函数的结果传递给类型a -> m b
函数b -> m c
:
(<=<) :: (Monad m) => (b -> m c) -> (a -> m b) -> (a -> m c)
f <=< g = (\x -> g x >>= f)
但是,对于下面的示例:
ghci> let f x = [x, -x]
ghci> let g x = [x*3, x*2]
ghci> let h = f <=< g
ghci> h 3
[9, -9, 6, -6]
是f x
和g x
两者的功能?似乎它们是具有不同 x 值而不是函数的列表。let h = f <=< g
该行在上面的代码中是如何工作的?f
并且g
必须是函数,因为它们与它们一起使用,<=<
但我不确定它们是什么。