Everything is now Data.Text instead of String

This commit is contained in:
vegowotenks 2025-02-21 18:17:46 +01:00
parent 753f429ec8
commit cbfd729795
18 changed files with 178 additions and 137 deletions

View file

@ -1,5 +1,6 @@
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Ubc.Parse.Syntax.Struct
( Struct(..)
, parse
@ -26,11 +27,12 @@ import qualified Ubc.Parse.Syntax.Language as UbcLanguage
import qualified Ubc.Parse.Syntax.VariableType as VariableType
import qualified Ubc.Parse.Syntax.Function as Function
import qualified Ubc.Parse.Syntax.Generic as Syntax.Generic
import Ubc.Parse.Syntax (Token)
type VariableName = String
type VariableName = Token
data Struct = Struct
{ name :: String
{ name :: Token
, generics :: [Syntax.Generic.Generic]
, body :: StructBody
}
@ -43,7 +45,7 @@ data StructBody = StructBody
deriving stock (Generic, Show)
deriving (Semigroup, Monoid) via Generically StructBody
parse :: Monad m => ParsecT String u m Struct
parse :: Monad m => ParsecT Token u m Struct
parse = do
_ <- UbcLanguage.reserved "struct"
structIdentifier <- UbcLanguage.identifier
@ -52,10 +54,10 @@ parse = do
pure $ Struct structIdentifier structGenerics structBody
structMember :: Monad m => ParsecT String u m StructBody
structMember :: Monad m => ParsecT Token u m StructBody
structMember = choice [ structVariableOrFunction ]
structVariableOrFunction :: Monad m => ParsecT String u m StructBody
structVariableOrFunction :: Monad m => ParsecT Token u m StructBody
structVariableOrFunction = do
(typeName, identifier) <- try $ do
typeName <- UbcLanguage.typeName
@ -66,7 +68,7 @@ structVariableOrFunction = do
, (\ f -> mempty { functions = [f] }) <$!> Function.parsePrefixed typeName identifier
]
parseVariable :: Monad m => VariableType -> String -> ParsecT String u m StructBody
parseVariable :: Monad m => VariableType -> Token -> ParsecT Token u m StructBody
parseVariable variableType variableName = do
_ <- UbcLanguage.semicolon
return $ mempty { variables = [(variableName, variableType)] }