简短版本:我想为一种函数type myType = [Int] -> (Tree Int,[Int])
添加别名但是多态(意思是我可以放入任何内容而不仅仅是Int
)。我怎么能这样做?
长版:我目前有:
data Colour = R | B deriving (Show, Read, Eq)
data Tree elt = E | T Colour (Tree elt) elt (Tree elt) deriving (Show, Read, Eq)
type Set a = Tree a
我想要:
type Funcs = [elt] -> (Tree elt, [elt])
然后编写一些类型为Funcs
treeify_zero :: Treeify_t
treeify_zero lst = (E,lst)
treeify_one :: Treeify_t
treeify_one (h:t) = ((T R E h E), t)
喜欢这个。目前,我无法让type Funcs = forall elt. [elt] -> (Tree elt, [elt])
在GHCi中正常运行。如果我使用type Funcs elt = [elt] -> (Tree elt, [elt])
GHCi抱怨我对treeify_zero/one
"的定义应该有1个参数,但是没有给出
在'to':to :: Treeify_t"
答案 0 :(得分:2)
听起来你想要参数化类型同义词 - elt
不能无处不在。也许你在追求
type Funcs elt = [elt] -> (Tree elt, [elt])
或者你想要一些其他的活页夹,比如type Funcs = forall elt. [elt] -> (Tree elt, [elt])
。但你还没有说出你想要做什么,所以很难说。 : - )