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