可能重复:
为什么在haskell中不允许这样的函数定义?
我做了一个名为 .haskell 的函数funlist
。它的作用是接受一个起始值和一个函数列表,并将列表中的所有函数应用于起始值。
funlist thing [function] = function thing
funlist thing (function:functions) = funlist (function thing) functions
funlist _ _ = error "need a list of functions"
这个函数的问题是它的类型是funlist :: t -> [t -> t] -> t
. 该类型意味着虽然 ghc 将允许不将起始值转换为完全不同类型的函数列表(例如[sin,cos,tan]
将被允许),但将起始值转换为不同类型(例如show
)的函数将产生错误因为该函数与类型签名不匹配。
这不是该功能应该如何工作的方式。它应该能够获取更改起始值类型(例如[sin,show]
)的函数列表。这个函数基本上转换funlist 5 [sin,cos,tan,isInfinite,show]
为show $ isInfinite $ tan $ cos $ sin $ 5
,虽然后者有效,但前者无效。
有什么办法可以让这个功能正常工作吗?
编辑:我知道.
and >>>
,我只是想知道是否有办法使这项工作。