gpt4 book ai didi

haskell - 什么是 '[] and ' : in Haskell?

转载 作者:行者123 更新时间:2023-12-04 17:29:59 25 4
gpt4 key购买 nike

我看过这个'[]':一些地方的语法,尤其是在异构列表包中,如 HListHVect .

例如,异质向量 HVect定义为

data HVect (ts :: [*]) where
HNil :: HVect '[]
(:&:) :: !t -> !(HVect ts) -> HVect (t ': ts)

在 GHCi 中,扩展名为 TemplateHaskellDataKinds ,我明白了
> :t '[]
'[] :: template-haskell-2.13.0.0:Language.Haskell.TH.Syntax.Name
> :t '(:)
'(:) :: template-haskell-2.13.0.0:Language.Haskell.TH.Syntax.Name

我的印象是这与依赖类型和种类等有关,与模板 haskell 无关。

搜索引擎和 hoogle , 和 hayoo , 使用 '[] 处理查询或 ':相当糟糕,因此问题: 这些'[]的名称是什么?和 ':事物? 指向文档或教程的指针将是最受欢迎的。

最佳答案

DataKinds允许在类型级别使用术语级别的构造函数。


data T = A | B | C

可以编写由值 T 索引的类型
data U (t :: T) = ...
foo :: U A -> U B -> ...

然而在这里, AB用作类型,而不是值。因此,必须使用引用来“提升”它们:
data U (t :: T) = ...
foo :: U 'A -> U 'B -> ...

熟悉的列表语法也是如此。 '[]是一个空列表,在类型级别提升。 '[a,b,c]a ': b ': c ': '[] 相同,在类型级别提升的列表。
type           :: kind
'[] :: [k] -- polykinded! works for any kind k
'[ 'A, 'B, 'C] :: [T] -- mind the spaces, we do not want the char '['
'A ': '[] :: [T]
'[ Int, Bool ] :: [*] -- a list of types
'[ Int ] :: [*] -- a list of types with only one element
[Int] :: * -- a type "list of Int"

请注意最后两种情况,其中引号消除了语法的歧义。

关于haskell - 什么是 '[] and ' : in Haskell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54020335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com