rig*_*old 8 syntax haskell gadt
这两个GADT声明之间有区别吗?
data A a b where
...
data A :: * -> * -> * where
...
Run Code Online (Sandbox Code Playgroud)
没有区别.有人可能会认为在构造函数签名中不需要在头文件中使用类型变量就需要使用不同的名称,如:
data A :: * -> * -> * where
AN :: Num x => x -> b -> A x b
AS :: IsString s => s -> b -> A s b
Run Code Online (Sandbox Code Playgroud)
但是,正如GHC用户指南所说......
与Haskell-98样式的数据类型声明不同,
data Set a where
标头中的类型变量没有作用域.
......所以这也有效:
data A a b where
AN :: Num x => x -> b -> A x b
AS :: IsString s => s -> b -> A s b
Run Code Online (Sandbox Code Playgroud)