packages feed

snail-0.1.2.0: src/Snail/ToText.hs

module Snail.ToText (toText) where

import Data.Text
import Snail.Ast

bracket :: Text -> Bracket -> Text
bracket txt = \case
    Round -> "(" <> txt <> ")"
    Square -> "[" <> txt <> "]"
    Curly -> "{" <> txt <> "}"

toText :: SnailAst -> Text
toText = \case
    TextLiteral (_, txt) -> "\"" <> txt <> "\""
    Lexeme (_, lexeme) -> lexeme
    SExpression Nothing bracketKind exprs ->
        let txt = Data.Text.unwords $ toText <$> exprs
         in bracket txt bracketKind
    SExpression (Just c) bracketKind exprs ->
        let txt = Data.Text.unwords $ toText <$> exprs
         in singleton c <> bracket txt bracketKind