module Data.String.Base where
Primitive: Characters and strings🔗
We bind the big list of Agda primitives for interacting with characters and strings.
postulate String : Type {-# BUILTIN STRING String #-} private module P where primitive primStringUncons : String → Maybe (Char × String) primStringToList : String → List Char primStringFromList : List Char → String primStringAppend : String → String → String primStringToListInjective : ∀ a b → primStringToList a ≡ᵢ primStringToList b → a ≡ᵢ b
open P public renaming ( primStringUncons to uncons-string ; primStringToList to string→list ; primStringFromList to list→string ) hiding ( primStringAppend ; primStringToListInjective )
record From-string {a} (A : Type a) : Type (lsuc a) where field Constraint : String → Type a from-string : (s : String) {{_ : Constraint s}} → A open From-string {{...}} public using (from-string) {-# DISPLAY From-string.from-string _ s = from-string s #-} {-# BUILTIN FROMSTRING from-string #-} instance From-string-String : From-string String From-string-String .From-string.Constraint _ = ⊤ From-string-String .from-string s = s Append-String : Append String Append-String ._<>_ = P.primStringAppend Append-String .mempty = "" {-# DISPLAY P.primStringAppend x y = x <> y #-} instance Discrete-String : Discrete String Discrete-String = Discrete-inj' _ (P.primStringToListInjective _ _)