This commit is contained in:
voidlizard 2025-02-04 10:35:35 +03:00
parent 29c59994e1
commit 3144004351
3 changed files with 10 additions and 13 deletions

View File

@ -70,20 +70,9 @@ pattern FixmeHashLike e <- (fixmeHashFromSyn -> Just e)
pattern TimeStampLike :: forall {c} . FixmeTimestamp -> Syntax c
pattern TimeStampLike e <- (tsFromFromSyn -> Just e)
class MkId a where
mkId :: a -> Id
instance MkId String where
mkId s = fromString s
instance MkId FixmeAttrName where
mkId (k :: FixmeAttrName) = Id ("$" <> coerce k)
instance MkId (Text,Int) where
mkId (p, i) = Id (p <> fromString (show i))
instance MkId (String,Integer) where
mkId (p, i) = Id (fromString p <> fromString (show i))
fixmeHashFromSyn :: Syntax c -> Maybe Text

View File

@ -624,6 +624,8 @@ eval' dict0 syn' = handle (handleForm syn') $ do
-- liiftIO $ print $ show $ "TRACE EXP" <+> pretty syn
let importDecls = HS.fromList [ "import", "define", "define-macro" :: Id ]
let isDefine x = x == "define" || x == "local"
case syn' of
SymbolVal (Id s) | Text.isPrefixOf ":" s -> do
@ -696,7 +698,7 @@ eval' dict0 syn' = handle (handleForm syn') $ do
pure nil
ListVal [SymbolVal "define", SymbolVal what, e] -> do
ListVal [SymbolVal def, SymbolVal what, e] | isDefine def -> do
ev <- eval e
bind what ev>> pure nil
@ -722,7 +724,7 @@ eval' dict0 syn' = handle (handleForm syn') $ do
ListVal [SymbolVal "lambda", arglist, body] -> do
pure $ mkForm @c "lambda" [ arglist, body ]
ListVal [SymbolVal "define", LambdaArgs (name : args), e] -> do
ListVal [SymbolVal def, LambdaArgs (name : args), e] | isDefine def -> do
bind name ( mkForm @c "lambda" [ mkList [ mkSym s | s <- args], e ] )
pure nil

View File

@ -350,6 +350,12 @@ instance IsContext c => MkSym c String where
instance IsContext c => MkSym c Text where
mkSym s = Symbol noContext (Id s)
instance MkId (Text,Int) where
mkId (p, i) = Id (p <> Text.pack (show i))
instance MkId (String,Integer) where
mkId (p, i) = Id (Text.pack (p <> show i))
instance IsContext c => MkSym c Id where
mkSym = Symbol noContext