mirror of https://github.com/voidlizard/hbs2
wip, cons, top:stdin
This commit is contained in:
parent
b4f8cd8354
commit
5df971bbac
|
@ -33,6 +33,7 @@ import Data.Kind
|
||||||
import Data.List (isPrefixOf)
|
import Data.List (isPrefixOf)
|
||||||
import Data.List qualified as List
|
import Data.List qualified as List
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
import Data.Either
|
||||||
import Data.String
|
import Data.String
|
||||||
import Data.Text.IO qualified as TIO
|
import Data.Text.IO qualified as TIO
|
||||||
import Data.Text qualified as Text
|
import Data.Text qualified as Text
|
||||||
|
@ -966,9 +967,13 @@ internalEntries = do
|
||||||
_ -> throwIO (TypeCheckError @C nil)
|
_ -> throwIO (TypeCheckError @C nil)
|
||||||
|
|
||||||
entry $ bindMatch "head" $ \case
|
entry $ bindMatch "head" $ \case
|
||||||
[ ListVal es ] -> pure (head es)
|
[ ListVal es ] -> pure (headDef nil es)
|
||||||
_ -> throwIO (TypeCheckError @C nil)
|
_ -> throwIO (TypeCheckError @C nil)
|
||||||
|
|
||||||
|
entry $ bindMatch "cons" $ \case
|
||||||
|
[ e, ListVal es ] -> pure (mkList (e:es))
|
||||||
|
_ -> throwIO (BadFormException @C nil)
|
||||||
|
|
||||||
brief "get tail of list"
|
brief "get tail of list"
|
||||||
$ args [arg "list" "list"]
|
$ args [arg "list" "list"]
|
||||||
$ desc "nil if the list is empty; error if not list"
|
$ desc "nil if the list is empty; error if not list"
|
||||||
|
@ -1140,6 +1145,11 @@ internalEntries = do
|
||||||
e@(SymbolVal x) -> wrapWith e
|
e@(SymbolVal x) -> wrapWith e
|
||||||
_ -> id
|
_ -> id
|
||||||
|
|
||||||
|
|
||||||
|
entry $ bindMatch "top:stdin" $ const do
|
||||||
|
liftIO TIO.getContents
|
||||||
|
<&> either (const nil) (mkList . fmap fixContext) . parseTop
|
||||||
|
|
||||||
brief "parses string as toplevel and produces a form"
|
brief "parses string as toplevel and produces a form"
|
||||||
$ desc "parse:top:string SYMBOL STRING-LIKE"
|
$ desc "parse:top:string SYMBOL STRING-LIKE"
|
||||||
$ entry $ bindMatch "parse:top:string" $ \case
|
$ entry $ bindMatch "parse:top:string" $ \case
|
||||||
|
|
Loading…
Reference in New Issue