mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
de65f4bc94
commit
a17bdba8ce
|
@ -136,6 +136,7 @@ pattern Lambda a e <- ListVal [SymbolVal "lambda", LambdaArgs a, e]
|
||||||
pattern LambdaArgs :: [Id] -> Syntax c
|
pattern LambdaArgs :: [Id] -> Syntax c
|
||||||
pattern LambdaArgs a <- (lambdaArgList -> Just a)
|
pattern LambdaArgs a <- (lambdaArgList -> Just a)
|
||||||
|
|
||||||
|
|
||||||
lambdaArgList :: Syntax c -> Maybe [Id]
|
lambdaArgList :: Syntax c -> Maybe [Id]
|
||||||
|
|
||||||
lambdaArgList (ListVal a) = sequence argz
|
lambdaArgList (ListVal a) = sequence argz
|
||||||
|
@ -341,13 +342,13 @@ eval syn = handle (handleForm syn) $ do
|
||||||
ListVal [ SymbolVal "quot", ListVal b] -> do
|
ListVal [ SymbolVal "quot", ListVal b] -> do
|
||||||
pure $ mkList b
|
pure $ mkList b
|
||||||
|
|
||||||
ListVal [SymbolVal "lambda", arglist, body] -> do
|
|
||||||
pure $ mkForm @c "lambda" [ arglist, body ]
|
|
||||||
|
|
||||||
ListVal [SymbolVal "define", SymbolVal what, e] -> do
|
ListVal [SymbolVal "define", SymbolVal what, e] -> do
|
||||||
ev <- eval e
|
ev <- eval e
|
||||||
bind what ev>> pure nil
|
bind what ev>> pure nil
|
||||||
|
|
||||||
|
ListVal [SymbolVal "lambda", arglist, body] -> do
|
||||||
|
pure $ mkForm @c "lambda" [ arglist, body ]
|
||||||
|
|
||||||
ListVal [SymbolVal "define", LambdaArgs (name : args), e] -> do
|
ListVal [SymbolVal "define", LambdaArgs (name : args), e] -> do
|
||||||
bind name ( mkForm @c "lambda" [ mkList [ mkSym s | s <- args], e ] )
|
bind name ( mkForm @c "lambda" [ mkList [ mkSym s | s <- args], e ] )
|
||||||
pure nil
|
pure nil
|
||||||
|
@ -461,12 +462,6 @@ internalEntries = do
|
||||||
let wat = [ mkList @c [mkSym i, e] | (i,e) <- optlist syn ]
|
let wat = [ mkList @c [mkSym i, e] | (i,e) <- optlist syn ]
|
||||||
pure $ mkForm "dict" wat
|
pure $ mkForm "dict" wat
|
||||||
|
|
||||||
entry $ bindMatch "lambda" $ \case
|
|
||||||
[a, b] -> do
|
|
||||||
pure $ mkForm "lamba" [ mkSym "_", mkSym "..." ]
|
|
||||||
|
|
||||||
_ -> error "SHIT"
|
|
||||||
|
|
||||||
entry $ bindMatch "map" $ \syn -> do
|
entry $ bindMatch "map" $ \syn -> do
|
||||||
case syn of
|
case syn of
|
||||||
[ListVal (SymbolVal "lambda" : SymbolVal fn : _), ListVal rs] -> do
|
[ListVal (SymbolVal "lambda" : SymbolVal fn : _), ListVal rs] -> do
|
||||||
|
|
Loading…
Reference in New Issue