]> Git — Sourcephile - tmp/julm/symantic.git/blob - src/Symantic/Printer.hs
init
[tmp/julm/symantic.git] / src / Symantic / Printer.hs
1 {-# LANGUAGE ExistentialQuantification #-}
2 {-# LANGUAGE RankNTypes #-}
3
4 module Symantic.Printer where
5
6 import Control.Applicative (Applicative (..))
7 import Control.Monad (Monad (..))
8 import Control.Monad.Trans.Except qualified as MT
9 import Control.Monad.Trans.Reader qualified as MT
10 import Control.Monad.Trans.State qualified as MT
11 import Data.Bool (otherwise)
12 import Data.Either (Either (..))
13 import Data.Eq (Eq (..))
14 import Data.Function (id, ($), (.))
15 import Data.Functor (Functor (..), (<$>))
16 import Data.Functor.Constant (Constant (..))
17 import Data.Int (Int)
18 import Data.Kind (Constraint, Type)
19 import Data.Maybe (Maybe (..), isJust)
20 import Data.Proxy (Proxy (..))
21 import Data.Semigroup (Semigroup (..))
22 import Data.String (String)
23 import GHC.Types
24 import Text.Read (Read (..), reads)
25 import Text.Show (Show (..))
26 import Unsafe.Coerce (unsafeCoerce)
27 import Prelude (error)
28 import Prelude qualified
29
30 import Symantic.Compiler
31 import Symantic.Parser
32
33 -- TODO: var num
34 newtype Printer meta a = Printer {unPrinter :: TermAST meta}
35 print :: Printer meta a -> TermAST meta
36 print = unPrinter
37 print2 :: String -> Printer meta a1 -> Printer meta a2 -> Printer meta a3
38 print2 n (Printer aT) (Printer bT) = Printer $ BinTree2 (BinTree2 (BinTree0 (TokenTermAtom n)) aT) bT