diff --git a/src/Ubc/Parse/Syntax/Expression.hs-boot b/src/Ubc/Parse/Syntax/Expression.hs-boot index 6375669..e18a003 100644 --- a/src/Ubc/Parse/Syntax/Expression.hs-boot +++ b/src/Ubc/Parse/Syntax/Expression.hs-boot @@ -1,7 +1,4 @@ module Ubc.Parse.Syntax.Expression -( Expression(..) -, expressionParser -) where import Text.Parsec (ParsecT) diff --git a/src/Ubc/Parse/Syntax/File.hs b/src/Ubc/Parse/Syntax/File.hs index 3552203..e83f507 100644 --- a/src/Ubc/Parse/Syntax/File.hs +++ b/src/Ubc/Parse/Syntax/File.hs @@ -13,15 +13,11 @@ import Data.Functor ((<&>)) import Text.Parsec (choice, ParsecT, many) -import Ubc.Parse.Syntax (Transformer) - -import {-# SOURCE #-} Ubc.Parse.Syntax.Import (Import) -import Ubc.Parse.Syntax.Struct (Struct) +import Ubc.Parse.Syntax.Struct ( Struct ) import Ubc.Parse.Syntax.Function (Function) import Ubc.Parse.Syntax.Statement (Statement) import Ubc.Parse.Syntax.Enumeration (Enumeration) -import {-# SOURCE #-} qualified Ubc.Parse.Syntax.Import as Import import qualified Ubc.Parse.Syntax.Struct as Struct import qualified Ubc.Parse.Syntax.Function as Function import qualified Ubc.Parse.Syntax.Statement as Statement @@ -34,8 +30,7 @@ data File = File deriving (Show) data FileBody = FileBody - { imports :: [Import] - , structs :: [Struct] + { structs :: [Struct] , functions :: [Function] , statements :: [Statement] , enumerations :: [Enumeration] @@ -44,13 +39,12 @@ data FileBody = FileBody deriving (Semigroup, Monoid) via Generically FileBody -- dont use `deriving ... via FileBody` because that leads to a loop, somehow -parse :: String -> ParsecT String u Transformer File +parse :: Monad m => String -> ParsecT String u m File parse source = File source <$!> mconcat <$!> many fileMember -fileMember :: ParsecT String u Transformer FileBody +fileMember :: Monad m => ParsecT String u m FileBody fileMember = choice [ Struct.parse <&> \s -> mempty { structs = [s] } - , Import.parse <&> \i -> mempty { imports = [i] } , Function.parse <&> \f -> mempty { functions = [f] } , Statement.parse <&> \s -> mempty { statements = [s] } , Enumeration.parse <&> \e -> mempty { enumerations = [e] } diff --git a/src/Ubc/Parse/Syntax/Import.hs b/src/Ubc/Parse/Syntax/Import.hs index 3f4ba86..b16ba6e 100644 --- a/src/Ubc/Parse/Syntax/Import.hs +++ b/src/Ubc/Parse/Syntax/Import.hs @@ -1,5 +1,4 @@ {-# LANGUAGE LambdaCase #-} -{-# LANGUAGE DerivingStrategies #-} module Ubc.Parse.Syntax.Import ( parse , Import(..) @@ -38,7 +37,6 @@ data Import = Import { file :: File.File , alias :: String } - deriving stock (Show) importPath :: Monad m => ParsecT String u m (NonEmpty String) importPath = UbcLanguage.angles (many importChar `sepBy1` char '/') @@ -86,7 +84,7 @@ notFoundMessage relFile searchedLocations = "Could not locate import file path" <> "Searched locations were:" <> (unlines . List.map (('\t':) . Path.fromAbsFile) $ searchedLocations) -parseFile :: Path Abs File -> String -> ParsecT String u Transformer Import +parseFile :: MonadIO m => Path Abs File -> String -> ParsecT String u m Import parseFile path importAs = do let stringPath = Path.fromAbsFile path contents <- liftIO . readFile $ stringPath diff --git a/src/Ubc/Parse/Syntax/Statement.hs-boot b/src/Ubc/Parse/Syntax/Statement.hs-boot index 59b2f7c..5918975 100644 --- a/src/Ubc/Parse/Syntax/Statement.hs-boot +++ b/src/Ubc/Parse/Syntax/Statement.hs-boot @@ -1,6 +1,4 @@ module Ubc.Parse.Syntax.Statement -( Statement -) where data Statement