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

Is it possible to declare a constrained data type using record syntax?

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

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

导致 GHC 抱怨 "Record syntax is illegal here"。

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

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

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

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

使用 StandaloneDeriving,因为正常的 deriving 不起作用。)