Haskell编写你的(.)函数版本

Joa*_*nna 2 haskell

有人可以帮我在Haskell中编写自己的(.)函数版本吗?从这篇文章Haskell写你的($)函数的版本我知道如何确定这个函数的类型,但我的身体仍然有问题.我也不知道为什么ghci拒绝使用名称(..).

 ($$$) :: (b -> c) -> (a -> b) -> a -> c 
 ($$$) f (g x) = ((f g) $) x
 infixr 9 $$$
Run Code Online (Sandbox Code Playgroud)

我的另一个想法就是这个:

($$$) :: (b -> c) -> (a -> b) -> a -> c 
($$$) f (g x) = map (f) (g x)
infixr 9 $$$
Run Code Online (Sandbox Code Playgroud)

错误消息显示"模式中的解析错误:g".

Eri*_*ikR 5

从签名:

($$$) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)

你的函数需要3个参数.所以我会开始:

($$$) f g x = ...
      | |  \
      | \   a
      |  \
      |   a->b
    b->c
Run Code Online (Sandbox Code Playgroud)

更新

这种定义尝试($$$)不起作用:

($$$) (f g) x = ...
Run Code Online (Sandbox Code Playgroud)

它说这($$$)需要两个参数.我开始定义的方式($$$)说该函数有三个参数.