pretty printing
This commit is contained in:
parent
d5a34360bb
commit
1330966180
2 changed files with 38 additions and 13 deletions
24
app/Expr.hs
24
app/Expr.hs
|
|
@ -3,6 +3,7 @@
|
|||
module Expr where
|
||||
|
||||
import Data.Function (on)
|
||||
import Data.List (genericDrop)
|
||||
|
||||
data Expr where
|
||||
Var :: Integer -> Expr
|
||||
|
|
@ -13,6 +14,29 @@ data Expr where
|
|||
Pi :: Expr -> Expr -> Expr
|
||||
deriving (Show, Eq)
|
||||
|
||||
{- --------------------- PRETTY PRINTING ----------------------------- -}
|
||||
|
||||
-- TODO : store parsed identifiers for better printing
|
||||
genName :: Integer -> String
|
||||
genName k = case genericDrop k ["x", "y", "z", "w", "u", "v"] of
|
||||
[] -> 'x' : show (k - 6)
|
||||
(v : _) -> v
|
||||
|
||||
pretty :: Expr -> String
|
||||
pretty = helper 0
|
||||
where
|
||||
helper :: Integer -> Expr -> String
|
||||
helper k (Var n) = genName $ k - n - 1
|
||||
helper _ Star = "*"
|
||||
helper _ Square = "□"
|
||||
helper k (App e1 e2) = "(" ++ helper k e1 ++ " " ++ helper k e2 ++ ")"
|
||||
helper k (Abs ty b) =
|
||||
"(λ" ++ genName k ++ " : " ++ helper k ty ++ " . " ++ helper (k + 1) b ++ ")"
|
||||
helper k (Pi ty b) =
|
||||
"(∏" ++ genName k ++ " : " ++ helper k ty ++ " . " ++ helper (k + 1) b ++ ")"
|
||||
|
||||
{- --------------- ACTUAL MATH STUFF ---------------- -}
|
||||
|
||||
isSort :: Expr -> Bool
|
||||
isSort Star = True
|
||||
isSort Square = True
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
module Main where
|
||||
|
||||
import Expr
|
||||
import Parser
|
||||
import System.IO
|
||||
|
||||
|
|
@ -10,4 +11,4 @@ main = do
|
|||
input <- getLine
|
||||
case pAll input of
|
||||
Left err -> putStrLn err
|
||||
Right expr -> print expr
|
||||
Right expr -> putStrLn $ pretty expr
|
||||
|
|
|
|||
Loading…
Reference in a new issue