{-# OPTIONS --without-K #-}
-- Courtesy to Donnacha Oisín Kidney
--
-- https://doisinkidney.com/posts/2019-04-20-ListSyntax.html
open import Data.List hiding ([_])
open import Data.Product
open import Level
module Experiment.ListSyntax where
module _ where
record ListSyntax {a b} (A : Set a) (B : Set b) : Set (a ⊔ b) where
field [_] : B → List A
open ListSyntax ⦃ ... ⦄ public
instance
cons : ∀ {a b} {A : Set a} {B : Set b} ⦃ _ : ListSyntax A B ⦄
→ ListSyntax A (A × B)
[_] ⦃ cons ⦄ (x , xs) = x ∷ [ xs ]
instance
sing : ∀ {a} {A : Set a} → ListSyntax A A
[_] ⦃ sing ⦄ = _∷ []