我想构造一个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
如果您愿意,您可以使用更多类型 system-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
上的操作。