2015-10-19 77 views
1

所以,我基本上定義了一個元組列表的類型,我無法弄清楚如何使它變爲多態。 到目前爲止,我已經得到了製作一個多態的類型

module ListTup where 
type ListTup = [(Char, String)] 

,我想知道是否有可能使它使得炭部分可以是任何E.I字符串,整數什麼都。 這可能嗎? 我試圖用Maybe類型,但它拋出一個錯誤噸我的方式

+0

這個問題沒有足夠的具體細節來得到很好的答案。你究竟想用這種類型做什麼? – dfeuer

回答

8

定義時類型同義詞,像這樣你就可以包括類型變量:

type ListTup a = [(a, String)]

+0

當我這樣做時,它給出了錯誤,期待更多的參數'ListTup' –

+1

@NeoStreets你想做什麼?我可以將這些代碼複製並粘貼到我的GHCi中,而無需投訴。 –

+2

@NeoStreets你應該記得在使用它時提供變量,所以現在'f :: ListTup - > Int'的函數變成'f :: ListTup Char - > Int'。 –

0

這取決於你想做什麼。如果你想要不同的列表,每個列表在元組的第一個元素中都有相同的類型,你可以參數化類型構造器,就像上面提到的C.Quilley一樣。

如果您希望您的每一個列表,以便能夠有不同的類型,你可以框在代數類型所需的所有類型(有區別工會):

data MyKey = MyCharKey Char | MyStringKey String | MyIntKey Int 
type ListTup = [(MyKey, String)] 

你不能有「什麼」,這是因爲類型需要在編譯時確定。