Fix prelude

This commit is contained in:
Martin Fredin 2023-04-27 17:29:13 +02:00
parent 3729278041
commit e42c775135

View file

@ -2,46 +2,37 @@
module Main where module Main where
import AnnForall (annotateForall) import AnnForall (annotateForall)
import Codegen.Codegen (generateCode) import Codegen.Codegen (generateCode)
import Compiler (compile) import Compiler (compile)
import Control.Monad (when, (<=<)) import Control.Monad (when, (<=<))
import Data.List.Extra (isSuffixOf) import Data.List.Extra (isSuffixOf)
import Data.Maybe (fromJust, isNothing) import Data.Maybe (fromJust, isNothing)
import Desugar.Desugar (desugar) import Desugar.Desugar (desugar)
import GHC.IO.Handle.Text (hPutStrLn) import GHC.IO.Handle.Text (hPutStrLn)
import Grammar.ErrM (Err) import Grammar.ErrM (Err)
import Grammar.Layout (resolveLayout) import Grammar.Layout (resolveLayout)
import Grammar.Par (myLexer, pProgram) import Grammar.Par (myLexer, pProgram)
import Grammar.Print (Print, printTree) import Grammar.Print (Print, printTree)
import LambdaLifter (lambdaLift) import LambdaLifter (lambdaLift)
import Monomorphizer.Monomorphizer (monomorphize) import Monomorphizer.Monomorphizer (monomorphize)
import Renamer.Renamer (rename) import Renamer.Renamer (rename)
import ReportForall (reportForall) import ReportForall (reportForall)
import System.Console.GetOpt ( import System.Console.GetOpt (ArgDescr (NoArg, ReqArg),
ArgDescr (NoArg, ReqArg), ArgOrder (RequireOrder),
ArgOrder (RequireOrder), OptDescr (Option), getOpt,
OptDescr (Option), usageInfo)
getOpt, import System.Directory (createDirectory, doesPathExist,
usageInfo, getDirectoryContents,
) removeDirectoryRecursive,
import System.Directory ( setCurrentDirectory)
createDirectory, import System.Environment (getArgs)
doesPathExist, import System.Exit (ExitCode (ExitFailure),
getDirectoryContents, exitFailure, exitSuccess,
removeDirectoryRecursive, exitWith)
setCurrentDirectory, import System.IO (stderr)
) import System.Process (spawnCommand, waitForProcess)
import System.Environment (getArgs) import TypeChecker.TypeChecker (TypeChecker (Bi, Hm), typecheck)
import System.Exit (
ExitCode (ExitFailure),
exitFailure,
exitSuccess,
exitWith,
)
import System.IO (stderr)
import System.Process (spawnCommand, waitForProcess)
import TypeChecker.TypeChecker (TypeChecker (Bi, Hm), typecheck)
main :: IO () main :: IO ()
main = getArgs >>= parseArgs >>= uncurry main' main = getArgs >>= parseArgs >>= uncurry main'
@ -88,11 +79,11 @@ chooseTypechecker s options = options{typechecker = tc}
tc = case s of tc = case s of
"hm" -> pure Hm "hm" -> pure Hm
"bi" -> pure Bi "bi" -> pure Bi
_ -> Nothing _ -> Nothing
data Options = Options data Options = Options
{ help :: Bool { help :: Bool
, debug :: Bool , debug :: Bool
, typechecker :: Maybe TypeChecker , typechecker :: Maybe TypeChecker
} }
@ -166,4 +157,13 @@ printToErr = hPutStrLn stderr
fromErr :: Err a -> IO a fromErr :: Err a -> IO a
fromErr = either (\s -> printToErr s >> exitFailure) pure fromErr = either (\s -> printToErr s >> exitFailure) pure
prelude = "\n\nconst x y = x\n\ndata Bool () where\n True : Bool ()\n False : Bool ()\n\nlt : Int -> Int -> Bool ()\nlt = \\x. \\y. const True (x + y)" prelude :: String
prelude = unlines
[ "\n"
, "const : a -> b -> a"
, "data Bool () where"
, " False : Bool ()"
, " True : Bool ()"
, "lt : Int -> Int -> Bool ()"
, "lt x y = const True (x + y)"
]