如何规范描述Haskell中的多参数类型类(MPTC)实例?
多参数类型类(MPTC)实例的规范描述优化
背景
《Haskell语言报告2010》对单参数类型类(SPTC)的实例描述为:实例声明用于声明一种类型是某个类的实例。
Haskell Wiki指出:若将SPTC视为类型集合,那么多参数类型类(MPTC)就是类型间的关系。
下面的清单1包含了SPTC与MPTC的示例代码:
清单1
{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FunctionalDependencies #-} class Add1 a where plus1 :: a -> a -> a instance Add1 Integer where plus1 x y = x + y t0 = plus1 (2::Integer) (2::Integer) class Add2 a b c | a b -> c where plus2 :: a -> b -> c instance Add2 Integer Integer Integer where plus2 x y = x + y -- 以下实例合法,因为Add2的a和b参数能唯一确定c instance Add2 Integer Double Double where plus2 x y = fromIntegral x + y t1 = plus2 (2::Integer) (2::Integer) t2 = plus2 (2::Integer) (2.0::Double)
问题与自我尝试
我希望得到MPTC实例的简洁规范描述,自己尝试的定义如下:
MPTC的实例是满足类定义中声明的函数依赖的n元类型组(n≥2)的实例。其中函数依赖描述了n元类型组间关系的属性,该关系必须为函数,即x→y中每个x值仅对应一个y值。
是否存在更自然、更优的描述方式?
内容的提问来源于stack exchange,提问作者Patrick Browne
相关产品推荐
相关产品推荐

