8
什么是'[]
或':
是否代表Haskell代码?一些例子 -什么是Haskell语法(类型级别的操作符?)
data OrderPacket replies where
NoOrders :: OrderPacket '[]
data Elem :: [a] -> a -> * where
EZ :: Elem (x ': xs) x
什么是'[]
或':
是否代表Haskell代码?一些例子 -什么是Haskell语法(类型级别的操作符?)
data OrderPacket replies where
NoOrders :: OrderPacket '[]
data Elem :: [a] -> a -> * where
EZ :: Elem (x ': xs) x
从哈斯克尔用户指南节上Promoted list and tuple lists:
随着-XDataKinds,Haskell的列表和元组类型本身提升 种类,和恩为Y型的水平不变方便的语法, 虽然前缀报价:
data HList :: [*] -> * where HNil :: HList '[] HCons :: a -> HList t -> HList (a ': t) data Tuple :: (*,*) -> * where Tuple :: a -> b -> Tuple '(a,b) foo0 :: HList '[] foo0 = HNil foo1 :: HList '[Int] foo1 = HCons (3::Int) HNil foo2 :: HList [Int, Bool] foo2 = ...
(注:HCons声明还要求,因为 缀类型的操作-XTypeOperators(:'))。对于类型 - 两个或多个 元素的级别列表,例如上面的foo2的签名,由于含义是明确的,因此可能会省略 。但对于一个或 零元素列表(如foo0和foo1中),引号是必需的,因为 类型[]和[Int]在Haskell中具有现有含义。
所以基本上它是一个以单引号为前缀的语法,但它在类别层次上运行。一些playup使用ghci
与上面的代码:
λ> :t HNil
HNil :: HList '[]
λ> :t HCons
HCons :: a -> HList t -> HList (a : t)
λ> let x = 3 `HCons` HNil
λ> :t x
x :: Num a => HList '[a]
λ> let x = Tuple 3 "spj"
λ> :t x
x :: Num a => Tuple '(a, [Char])
完美!谢谢! –
完美(对于我需要的ghci::set -XDataKinds -XTypeOperators -XKindSignatures -XGADTs)。当然,数据种类! –
!该死的,我花了很多年试图弄清楚这一点...... – MathematicalOrchid