mirror of https://github.com/voidlizard/hbs2
bf6 cond
This commit is contained in:
parent
873d2e37aa
commit
09a6513625
|
@ -795,9 +795,28 @@ eval' dict0 syn' = handle (handleForm syn') $ do
|
||||||
e@(ListVal (SymbolVal "blob" : what)) -> do
|
e@(ListVal (SymbolVal "blob" : what)) -> do
|
||||||
pure e
|
pure e
|
||||||
|
|
||||||
|
r@(ListVal (SymbolVal "cond" : clauses)) -> do
|
||||||
|
|
||||||
|
flip fix clauses $ \next -> \case
|
||||||
|
|
||||||
|
(ListVal [SymbolVal "_", e1] : _) -> do
|
||||||
|
eval e1
|
||||||
|
|
||||||
|
(ListVal [p', e1] : rest) -> do
|
||||||
|
|
||||||
|
p <- eval p'
|
||||||
|
|
||||||
|
if isFalse p then
|
||||||
|
next rest
|
||||||
|
else do
|
||||||
|
eval e1
|
||||||
|
|
||||||
|
(_ : _) -> throwIO (BadFormException r)
|
||||||
|
|
||||||
|
[] -> pure nil
|
||||||
|
|
||||||
r@(ListVal (SymbolVal "match" : e' : clauses)) -> do
|
r@(ListVal (SymbolVal "match" : e' : clauses)) -> do
|
||||||
e <- eval e'
|
e <- eval e'
|
||||||
-- $ show $ "MATCH" <+> pretty e <+> pretty clauses
|
|
||||||
|
|
||||||
flip fix clauses $ \next -> \case
|
flip fix clauses $ \next -> \case
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue