我想構建一個Haskell類型:哈斯克爾構造類型包含
type SinglePP = (String,GLattice)
凡GLattice被定義爲:
class GLattice l where
join :: l->l->l
....
有沒有辦法爲我做到這一點?
我想構建一個Haskell類型:哈斯克爾構造類型包含
type SinglePP = (String,GLattice)
凡GLattice被定義爲:
class GLattice l where
join :: l->l->l
....
有沒有辦法爲我做到這一點?
type SinglePP a = (String, a)
,然後當你在一個函數中使用SinglePP
,限制a
是一個GLattice
someFunc :: GLattice a => SinglePP a ->()
someFunc a = doMagic a
如果你喜歡,你可以使用更多類型的系統foo和與存在的類型,放手您在每個功能之後都避免使用樣板,但是作爲交換,您必須使用顯式構造函數使用語言擴展和一個data
聲明。這意味着當你想要獲得a
時更多的模式匹配,但在類型聲明中輸入較少。
但是大多數類型都可以推斷。
使用ExistentialQuantification
延伸,就像這樣:
{-# LANGUAGE ExistentialQuantification #-}
class GLattice l where
join :: l -> l -> l
data SinglePP = forall a . (GLattice a) => SinglePP String a
這可以保證存儲在SinglePP
的第二個字段中的值認爲,實現GLattice
類的類型,但沒有指定哪些類型。這意味着您只能使用其上的GLattice
操作。
對於那些似乎對基本Haskell語法有困難的人來說,這似乎有點太過分了。存在會導致奇怪的邊緣情況。 – jozefg
當我想要從SinglePP獲取內容時,情況如何?像getVarFromPP::(GLattice a)=> SinglePP - > a,它不工作,如果我使用模式匹配 –
如果我想在列表中表示SinglePP,例如我想要做類似這樣的事情:type ProgramPoints = [SinglePP] –
我得到了它的工作,謝謝 –