//@NO-IMPLICIT-PRELUDE
//! A UTF-8 encoded string
let string_prim = import! std.string.prim
let prim = import! std.prim
let { Semigroup, (<>) } = import! std.semigroup
let { Monoid } = import! std.monoid
let { Show } = import! std.show
let { Eq, Ord, Ordering } = import! std.cmp
let function = import! std.function
let semigroup : Semigroup String = { append = string_prim.append }
/// Appends two strings.
///
/// Re-export of `semigroup.append`.
#[infix(left, 4)]
let (++) : String -> String -> String = (<>)
let monoid : Monoid String = { semigroup, empty = "" }
let eq : Eq String = { (==) = prim.string_eq }
let ord : Ord String = { eq, compare = prim.string_compare }
let show : Show String = { show = \s -> "\"" ++ s ++ "\"" }
{
eq,
ord,
show,
semigroup,
monoid,
(++),
..
string_prim
}