module Snail.ToText (toText) where import Data.Text import Snail.Ast bracket :: Text -> Bracket -> Text bracket :: Text -> Bracket -> Text bracket Text txt = \case Bracket Round -> Text "(" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text txt Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text ")" Bracket Square -> Text "[" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text txt Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text "]" Bracket Curly -> Text "{" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text txt Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text "}" toText :: SnailAst -> Text toText :: SnailAst -> Text toText = \case TextLiteral (SourcePos _, Text txt) -> Text "\"" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text txt Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text "\"" Lexeme (SourcePos _, Text lexeme) -> Text lexeme SExpression Maybe Char Nothing Bracket bracketKind [SnailAst] exprs -> let txt :: Text txt = [Text] -> Text Data.Text.unwords ([Text] -> Text) -> [Text] -> Text forall a b. (a -> b) -> a -> b $ SnailAst -> Text toText (SnailAst -> Text) -> [SnailAst] -> [Text] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [SnailAst] exprs in Text -> Bracket -> Text bracket Text txt Bracket bracketKind SExpression (Just Char c) Bracket bracketKind [SnailAst] exprs -> let txt :: Text txt = [Text] -> Text Data.Text.unwords ([Text] -> Text) -> [Text] -> Text forall a b. (a -> b) -> a -> b $ SnailAst -> Text toText (SnailAst -> Text) -> [SnailAst] -> [Text] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [SnailAst] exprs in Char -> Text singleton Char c Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text -> Bracket -> Text bracket Text txt Bracket bracketKind