簡體   English   中英

Agda中List的定義

[英]Definition of List in Agda

在Agda中依賴類型編程的第4頁上, List定義如下

infixr 40 _::_
data List (A : Set) : Set where
  [] : List A
  _::_ : A -> List A -> List A

我很難把頭纏在最后一行。 我之前學過一些Haskell,所以我對cons運算符很熟悉。

因此,您將擁有一個空列表(其類型為List A )或使用函數::創建類型A -> List A -> List A的新值:: -類型A -> List A -> List A ,其中需要一個類型為A元素以及一個類型為list的列表A並返回一個新的列表?

這似乎是直覺,但這並不映射到我所知道的遞歸數據類型定義的概念(來自haskell),例如

data Tree a = Leaf a | Branch (Tree a) (Tree a)

問題那么這是哪種類型? 阿格達涉及哪些概念?

在Haskell和Agda中有兩種語法來定義數據類型。

簡單的一個:

data List a = Nil | a :# List a

更具表現力的一種(在Haskell中,它用於定義GADT ):

{-# LANGUAGE GADTs #-}
data List a where
    Nil :: List a
    (:#) :: a -> List a -> List a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM