mirror of https://github.com/voidlizard/hbs2
fix
This commit is contained in:
parent
29c59994e1
commit
3144004351
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue