是否可以使用记录语法声明约束数据类型?

时间:2016-07-07 09:13:00

标签: haskell syntax gadt

是否可以使用constrained data type声明record syntax?我的尝试

data ConstrainedRecord a where
  ConstrainedRecord :: Num a => { first :: a, second :: a }

导致GHC抱怨“记录语法在这里是非法的。”

1 个答案:

答案 0 :(得分:12)

是的,但在GADT syntax中,您始终必须明确指定构造函数的返回类型:

data ConstrainedRecord a where
  ConstrainedRecord :: Num a => { first :: a, second :: a } -> ConstrainedRecord a

(另外,这可能会派上用场:

deriving instance (Show a) => Show (ConstrainedRecord a)

使用StandaloneDeriving,因为普通的deriving不起作用。)