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

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

使GHC提示“这里的记录语法是非法的”。

最佳答案

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

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

(此外,这可能会派上用场:
deriving instance (Show a) => Show (ConstrainedRecord a)

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

10-06 05:09