diff --git a/app/Gyehoek/Sexp.hs b/app/Gyehoek/Sexp.hs index b4bb594..885ff96 100644 --- a/app/Gyehoek/Sexp.hs +++ b/app/Gyehoek/Sexp.hs @@ -3,6 +3,7 @@ {-# LANGUAGE OverloadedStrings #-} module Gyehoek.Sexp ( let_ + , sexp , nonempty , nonEmptyGrammar , encode @@ -11,7 +12,7 @@ module Gyehoek.Sexp where import Data.Text (Text) -import Language.SexpGrammar as Sexp hiding (List, encode, decode) +import Language.SexpGrammar as Sexp hiding (List, encode, decode, iso) import Language.SexpGrammar qualified as Sexp import Language.SexpGrammar.Generic import Data.InvertibleGrammar.Base qualified as IGB @@ -20,11 +21,17 @@ import Data.InvertibleGrammar.Base ((:-)((:-))) import Data.List.NonEmpty (NonEmpty ((:|))) import Data.List (List) import Data.Text.Encoding +import Data.Either (either) import GHC.Generics (Generic) import Control.Lens -encode :: SexpIso a => a -> Either _ Text +sexp :: SexpIso a => Iso' a Text +sexp = iso + (either error id . encode) + (either error id . decode) + +encode :: SexpIso a => a -> Either String Text encode = (_Right %~ decodeUtf8 . view strict) . Sexp.encode decode :: SexpIso a => Text -> Either String a