我是一个中级策划者,但只是一个 haskell 初学者。这是我的问题:
假设你有一个关联二元运算,说(>>=)
。有这样的多元函数p
吗p (>>=) h g f e = h >>= g >>= f >>= e
?
我问这个问题是因为这个问题说如果二进制操作采用相同类型的输入是可能的。我想知道这是否可以概括。
EDIT-1:我尝试修改http://okmij.org/ftp/Haskell/vararg-fn.lhs中的代码(可变类型参数的可变数量部分),但进展不大。
EDIT-2:稍微简化代码。
{-# LANGUAGE FunctionalDependencies, FlexibleInstances #-}
module Main where
class Lfold f a b | b -> a where
lfold :: (a -> (f a) -> (f a)) -> (f a) -> a -> b
instance Lfold f a (f a) where
lfold op rid x = op x rid
instance Lfold f a b => Lfold f a (a -> b) where
lfold op rid x y = lfold op (op x rid) y
test :: [String]
test = lfold (:) [] "a" "b" "c"
main :: IO ()
main = putStrLn $ show test