haskell中的多态类型别名

时间:2013-09-07 05:42:12

标签: haskell types alias

简短版本:我想为一种函数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"

的类型签名中

1 个答案:

答案 0 :(得分:2)

听起来你想要参数化类型同义词 - elt不能无处不在。也许你在追求

type Funcs elt = [elt] -> (Tree elt, [elt])

或者你想要一些其他的活页夹,比如type Funcs = forall elt. [elt] -> (Tree elt, [elt])。但你还没有说出你想要做什么,所以很难说。 : - )