open import FRP.JS.List using ( List ; [] ; _∷_ ; build ) renaming ( length to llength )
open import FRP.JS.Char using ( Char ) renaming ( _<_ to _<C_ ; _≟_ to _≟C_ )
open import FRP.JS.Nat using ( ℕ )
open import FRP.JS.Bool using ( Bool ; true ; false ; _∧_ ; _∨_ )
module FRP.JS.String where
infixr 5 _++_
infix 4 _≟_
open import FRP.JS.Primitive public using ( String )
private
primitive
primStringAppend : String → String → String
primStringEquality : String → String → Bool
primStringToList : String → List Char
_++_ : String → String → String
_++_ = primStringAppend
{-# COMPILED_JS _++_ function(x) { return function(y) { return x + y; }; } #-}
_≟_ : String → String → Bool
_≟_ = primStringEquality
{-# COMPILED_JS _≟_ function(x) { return function(y) { return x === y; }; } #-}
buildChars : (ℕ → Char) → ℕ → List Char
buildChars = build
toList : String → List Char
toList = primStringToList
{-# COMPILED_JS toList function(s) {
return exports.buildChars(function(n) { return s.charAt(n); },s.length);
} #-}
length : String → ℕ
length s = llength (toList s)
{-# COMPILED_JS length function(s) { return s.length; } #-}
_<*_ : List Char → List Char → Bool
as <* [] = false
[] <* (b ∷ bs) = true
(a ∷ as) <* (b ∷ bs) = (a <C b) ∨ ((a ≟C b) ∧ (as <* bs))
_<_ : String → String → Bool
s < t = toList s <* toList t
{-# COMPILED_JS _<_ function(x) { return function(y) { return x < y; }; } #-}
_≤_ : String → String → Bool
s ≤ t = (s ≟ t) ∨ (s < t)
{-# COMPILED_JS _≤_ function(x) { return function(y) { return x <= y; }; } #-}