{-# OPTIONS --cubical --safe #-}

module Data.String where

open import Agda.Builtin.String using (String) public
open import Agda.Builtin.String
open import Agda.Builtin.String.Properties
open import Agda.Builtin.Char using (Char) public
open import Agda.Builtin.Char
open import Agda.Builtin.Char.Properties
open import Relation.Binary
open import Relation.Binary.Construct.On
import Data.Nat.Order as 
open import Function.Injective
open import Function
open import Path
open import Data.List
open import Data.List.Relation.Binary.Lexicographic

unpack : String  List Char
unpack = primStringToList

pack : List Char  String
pack = primStringFromList

charOrd : TotalOrder Char _ _
charOrd = on-ord primCharToNat lemma ℕ.totalOrder
  where
  lemma : Injective primCharToNat
  lemma x y p = builtin-eq-to-path (primCharToNatInjective x y (path-to-builtin-eq p ))

listCharOrd : TotalOrder (List Char) _ _
listCharOrd = listOrd charOrd

stringOrd : TotalOrder String _ _
stringOrd = on-ord primStringToList lemma listCharOrd
  where
  lemma : Injective primStringToList
  lemma x y p = builtin-eq-to-path (primStringToListInjective x y (path-to-builtin-eq p))