Source code on Github
open import Prelude.Init; open SetAsType
module Prelude.Lists.NoNil where
private
variable X A B : Type
pattern ๐ = injโ refl; pattern โ = injโ refl
record List? (X A : Type) : Typeโ where
field isList : (A โก X) โ (A โก List X)
syntax isList {X}{A} = A isListOf? X
toL : A โ List X
toL with isList
... | ๐ = [_]
... | โ = id
syntax toL {A = A} = toL[ A ]
open List? โฆ...โฆ public
instance
Pick๐ : List? X X
Pick๐ = record {isList = ๐}
Pickโ : List? X (List X)
Pickโ = record {isList = โ}
test-variant : โฆ List? X A โฆ โ A โ List X
test-variant {X}{A}
with A isListOf? X
... | ๐ = [_]
... | โ = id
infixr 4 _โ_
_โ_ : โฆ List? X A โฆ โ โฆ List? X B โฆ โ A โ B โ List X
x โ y = toL x ++ toL y
open import Prelude.General; open MultiTest
_ = List โ
โโฎ []
โฎ [ 0 ]
โฎ 0 โ 1
โฎ 0 โ [ 1 ]
โฎ [ 0 ] โ 1
โฎ [ 0 ] โ [ 1 ]
โฎ 0 โ 1 โ 2
โฎ 0 โ 1 โ [ 2 ]
โฎ 0 โ [ 1 ] โ 2
โฎ [ 0 ] โ 1 โ 2
โฎ 0 โ [ 1 ] โ [ 2 ]
โฎ [ 0 ] โ [ 1 ] โ 2
โฎ [ 0 ] โ 1 โ [ 2 ]
โฎ [ 0 ] โ [ 1 ] โ [ 2 ]
โฎโ