用(*)作为参数创建方形函数“join”?

时间:2016-07-31 20:54:36

标签: haskell

我正在玩pointfree.io,当我输入“\ x - > x * x”(又名方形函数)时,它确实输出了这个

join (*)

我不知道这个,我在Hoogle上查了一下:

-- | The 'join' function is the conventional monad join operator. It
-- is used to remove one level of monadic structure, projecting its
-- bound argument into the outer level.
join              :: (Monad m) => m (m a) -> m a
join x            =  x >>= id

我不知道如何创建一个返回其参数平方的函数。有什么想法吗?

1 个答案:

答案 0 :(得分:7)

((->)r)类型与以下实例definition

形成一个monad
instance Monad ((->) r) where
  f >>= k = \ r -> k (f r) r

join有以下definition

join x =  x >>= id

所以让我们开始填写内容。

join (*)
= (*) >>= id
= \r -> id ((*) r) r
= \r -> r * r