This commit is contained in:
Dmitry Zuikov 2024-05-16 16:39:08 +03:00
parent 0c5c235ed2
commit c1e3db0aea
1 changed files with 11 additions and 10 deletions

View File

@ -1,7 +1,5 @@
module Data.Config.Suckless.Parse.Fuzzy module Data.Config.Suckless.Parse.Fuzzy
( parseTop ( ParseSExp(..)
, parseSyntax
-- , C
) where ) where
import Data.Config.Suckless.Syntax import Data.Config.Suckless.Syntax
@ -9,18 +7,21 @@ import Data.Text.Fuzzy.SExp qualified as P
import Data.Text.Fuzzy.SExp (C0(..),SExpParseError,ForMicroSexp(..)) import Data.Text.Fuzzy.SExp (C0(..),SExpParseError,ForMicroSexp(..))
import Data.Functor import Data.Functor
import Data.Text import Data.Text as Text
import Control.Monad.Except import Control.Monad.Except
import Control.Monad.Identity import Control.Monad.Identity
import Data.Coerce
class ParseSExp what where
parseTop :: what -> Either SExpParseError [Syntax C]
parseSyntax :: what -> Either SExpParseError (Syntax C)
parseTop :: Text -> Either SExpParseError [Syntax C] instance ParseSExp Text where
parseTop what = runIdentity (runExceptT (P.parseTop what)) <&> fmap toSyntax parseTop what = runIdentity (runExceptT (P.parseTop what)) <&> fmap toSyntax
parseSyntax :: Text -> Either SExpParseError (Syntax C)
parseSyntax txt = runIdentity (runExceptT (P.parseSexp txt)) <&> toSyntax parseSyntax txt = runIdentity (runExceptT (P.parseSexp txt)) <&> toSyntax
instance ParseSExp String where
parseTop what = runIdentity (runExceptT (P.parseTop (Text.pack what))) <&> fmap toSyntax
parseSyntax txt = runIdentity (runExceptT (P.parseSexp (Text.pack txt))) <&> toSyntax
toSyntax :: P.MicroSexp C0 -> Syntax C toSyntax :: P.MicroSexp C0 -> Syntax C
toSyntax = \case toSyntax = \case