mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
5f87d12551
commit
9f21d78416
|
@ -865,7 +865,7 @@ eval' dict0 syn' = handle (handleForm syn') $ do
|
||||||
|
|
||||||
p <- eval p'
|
p <- eval p'
|
||||||
|
|
||||||
-- error $ show $ pretty p
|
-- display_ $ "EVALUATED:" <+> pretty p
|
||||||
|
|
||||||
wat <- matched [p,e] <&> \case
|
wat <- matched [p,e] <&> \case
|
||||||
ListVal es -> es
|
ListVal es -> es
|
||||||
|
@ -875,6 +875,9 @@ eval' dict0 syn' = handle (handleForm syn') $ do
|
||||||
| ListVal [SymbolVal n,x] <- wat, n /= "_"
|
| ListVal [SymbolVal n,x] <- wat, n /= "_"
|
||||||
] & HM.fromList
|
] & HM.fromList
|
||||||
|
|
||||||
|
-- display_ $ "WAT" <+> pretty wat
|
||||||
|
-- display_ $ "FOUND" <+> found
|
||||||
|
|
||||||
if List.null wat then
|
if List.null wat then
|
||||||
next rest
|
next rest
|
||||||
else do
|
else do
|
||||||
|
@ -1829,7 +1832,9 @@ internalEntries = do
|
||||||
es -> pure $ mkForm "builtin:closure" [mkSym "bf6:list?", mkList es]
|
es -> pure $ mkForm "builtin:closure" [mkSym "bf6:list?", mkList es]
|
||||||
|
|
||||||
entry $ bindMatch "bf6:list?" $ \case
|
entry $ bindMatch "bf6:list?" $ \case
|
||||||
[a,b] -> termMatches (mkList [mkSym "bf6:list?", a]) b
|
[a,b] -> do
|
||||||
|
termMatches (mkList [mkSym "bf6:list?", a]) b
|
||||||
|
|
||||||
e -> throwIO (BadFormException @c (mkList e))
|
e -> throwIO (BadFormException @c (mkList e))
|
||||||
|
|
||||||
entry $ bindMatch "?" $ \case
|
entry $ bindMatch "?" $ \case
|
||||||
|
@ -2457,7 +2462,7 @@ matched = \case
|
||||||
|
|
||||||
syn <- apply_ a [b]
|
syn <- apply_ a [b]
|
||||||
|
|
||||||
-- error $ show $ "AAAAA" <+> pretty a <+> pretty syn
|
-- display_ $ show $ "AAAAA" <+> pretty a <+> pretty syn
|
||||||
|
|
||||||
(_,w) <- runWriterT $ scan syn
|
(_,w) <- runWriterT $ scan syn
|
||||||
|
|
||||||
|
@ -2466,9 +2471,10 @@ matched = \case
|
||||||
where
|
where
|
||||||
scan = \case
|
scan = \case
|
||||||
ListVal [SymbolVal x, e] -> do
|
ListVal [SymbolVal x, e] -> do
|
||||||
e' <- scan e
|
-- display_ $ "KHUYAK" <+> pretty x <+> pretty e
|
||||||
tell [(x, e')]
|
-- e' <- scan e
|
||||||
pure e'
|
tell [(x, e)]
|
||||||
|
pure e
|
||||||
|
|
||||||
ListVal es -> do
|
ListVal es -> do
|
||||||
es' <- mapM scan es
|
es' <- mapM scan es
|
||||||
|
@ -2519,10 +2525,16 @@ termMatches pred what = case (pred, what) of
|
||||||
|
|
||||||
(ListVal [SymbolVal "bf6:list?", a@(ListVal as)], b@(ListVal bs)) -> do
|
(ListVal [SymbolVal "bf6:list?", a@(ListVal as)], b@(ListVal bs)) -> do
|
||||||
maybe nil mkList <$> runMaybeT do
|
maybe nil mkList <$> runMaybeT do
|
||||||
for (emit as bs) $ \case
|
for (emit as bs) $ \syn -> do
|
||||||
|
|
||||||
|
|
||||||
|
case syn of
|
||||||
Nothing -> mzero
|
Nothing -> mzero
|
||||||
|
|
||||||
Just (SymbolVal w, b) -> do
|
Just (SymbolVal w, b) -> do
|
||||||
|
-- error $ show $ "right fucking here 111" <+> pretty w <+> "->" <+> pretty b
|
||||||
pure $ mkList [mkSym w, b]
|
pure $ mkList [mkSym w, b]
|
||||||
|
|
||||||
Just (a,b) -> lift (apply_ a [b]) >>= \case
|
Just (a,b) -> lift (apply_ a [b]) >>= \case
|
||||||
ListVal (e:es) -> pure (mkList (e:es))
|
ListVal (e:es) -> pure (mkList (e:es))
|
||||||
e | e /= nil -> pure $ mkList [mkSym "_", e]
|
e | e /= nil -> pure $ mkList [mkSym "_", e]
|
||||||
|
|
Loading…
Reference in New Issue