wip, cons, top:stdin

This commit is contained in:
voidlizard 2025-01-24 17:49:17 +03:00
parent b4f8cd8354
commit 5df971bbac
1 changed files with 11 additions and 1 deletions

View File

@ -33,6 +33,7 @@ import Data.Kind
import Data.List (isPrefixOf)
import Data.List qualified as List
import Data.Maybe
import Data.Either
import Data.String
import Data.Text.IO qualified as TIO
import Data.Text qualified as Text
@ -966,9 +967,13 @@ internalEntries = do
_ -> throwIO (TypeCheckError @C nil)
entry $ bindMatch "head" $ \case
[ ListVal es ] -> pure (head es)
[ ListVal es ] -> pure (headDef nil es)
_ -> throwIO (TypeCheckError @C nil)
entry $ bindMatch "cons" $ \case
[ e, ListVal es ] -> pure (mkList (e:es))
_ -> throwIO (BadFormException @C nil)
brief "get tail of list"
$ args [arg "list" "list"]
$ desc "nil if the list is empty; error if not list"
@ -1140,6 +1145,11 @@ internalEntries = do
e@(SymbolVal x) -> wrapWith e
_ -> 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"
$ desc "parse:top:string SYMBOL STRING-LIKE"
$ entry $ bindMatch "parse:top:string" $ \case