{-# LANGUAGE OverloadedStrings #-}

module Language.Lojban.Canonicalization
( basicSentenceCanonicalizer
, extendedSentenceCanonicalizer
, extractSimpleBridi
, normalizeText
) where

import Language.Lojban.Core
import Language.Lojban.Canonicalization.Internals
import Util (replaceSubexpression)

-- | Basic general-purpose sentence canonicalizer.
basicSentenceCanonicalizer :: SentenceCanonicalizer
basicSentenceCanonicalizer :: SentenceCanonicalizer
basicSentenceCanonicalizer = SentenceCanonicalizer
canonicalizeText

-- | Simple extension of 'basicSentenceCanonicalizer' which disregards (potentially important) semantic variations.
--
-- Currently, all it does is replace "da", "de", and "di" with "zo'e", essentially treating all these quantifiers as the equivalent.
extendedSentenceCanonicalizer :: SentenceCanonicalizer
extendedSentenceCanonicalizer :: SentenceCanonicalizer
extendedSentenceCanonicalizer = SentenceCanonicalizer
basicSentenceCanonicalizer SentenceCanonicalizer -> (Text -> Text) -> SentenceCanonicalizer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
replaceQuantifiers where
    replaceQuantifiers :: Text -> Text
replaceQuantifiers = (Text -> Text -> Text -> Text
replaceSubexpression Text
"da" Text
"zo'e") (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Text -> Text -> Text
replaceSubexpression Text
"de" Text
"zo'e") (Text -> Text) -> (Text -> Text) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Text -> Text -> Text
replaceSubexpression Text
"di" Text
"zo'e")