atomo-0.4.0.2: src/Atomo/Kernel/Format.hs
{-# LANGUAGE QuasiQuotes #-}
module Atomo.Kernel.Format where
import Control.Monad.RWS
import Text.Parsec (runParser)
import Text.PrettyPrint
import Atomo
import Atomo.Format
import Atomo.Format.Parser
import Atomo.Format.Types
import Atomo.Pretty
load :: VM ()
load = do
([p|Formatter|] =::) =<< eval [e|Object clone|]
[p|Formatter new: (s: String)|] =: do
s <- getString [e|s|]
case runParser parser (FParserState [] []) "<new:>" s of
Right fs ->
[e|Formatter|] `newWith`
[ ("format", haskell fs)
]
Left er ->
raise ["formatting-parse"] [string (show er)]
[p|(f: Formatter) % (... inputs)|] =: do
fs <- eval [e|f format|] >>= fromHaskell
is <- getList [e|inputs|]
(_, f) <- evalRWST format fs (startState is)
return (String f)
[p|(f: Formatter) pretty|] =: do
fs <- eval [e|f format|] >>= fromHaskell
[e|Pretty|] `newWith`
[ ("doc", haskell (char 'f' <> doubleQuotes (pretty (fs :: Format))))
]