所以,我基本上定義了一個元組列表的類型,我無法弄清楚如何使它變爲多態。 到目前爲止,我已經得到了製作一個多態的類型
module ListTup where
type ListTup = [(Char, String)]
,我想知道是否有可能使它使得炭部分可以是任何E.I字符串,整數什麼都。 這可能嗎? 我試圖用Maybe類型,但它拋出一個錯誤噸我的方式
所以,我基本上定義了一個元組列表的類型,我無法弄清楚如何使它變爲多態。 到目前爲止,我已經得到了製作一個多態的類型
module ListTup where
type ListTup = [(Char, String)]
,我想知道是否有可能使它使得炭部分可以是任何E.I字符串,整數什麼都。 這可能嗎? 我試圖用Maybe類型,但它拋出一個錯誤噸我的方式
定義時類型同義詞,像這樣你就可以包括類型變量:
type ListTup a = [(a, String)]
。
當我這樣做時,它給出了錯誤,期待更多的參數'ListTup' –
@NeoStreets你想做什麼?我可以將這些代碼複製並粘貼到我的GHCi中,而無需投訴。 –
@NeoStreets你應該記得在使用它時提供變量,所以現在'f :: ListTup - > Int'的函數變成'f :: ListTup Char - > Int'。 –
這取決於你想做什麼。如果你想要不同的列表,每個列表在元組的第一個元素中都有相同的類型,你可以參數化類型構造器,就像上面提到的C.Quilley一樣。
如果您希望您的每一個列表,以便能夠有不同的類型,你可以框在代數類型所需的所有類型(有區別工會):
data MyKey = MyCharKey Char | MyStringKey String | MyIntKey Int
type ListTup = [(MyKey, String)]
你不能有「什麼」,這是因爲類型需要在編譯時確定。
這個問題沒有足夠的具體細節來得到很好的答案。你究竟想用這種類型做什麼? – dfeuer