From 5df971bbac05d93bb851feb447ebbea041b52e42 Mon Sep 17 00:00:00 2001 From: voidlizard Date: Fri, 24 Jan 2025 17:49:17 +0300 Subject: [PATCH] wip, cons, top:stdin --- .../lib/Data/Config/Suckless/Script/Internal.hs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Script/Internal.hs b/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Script/Internal.hs index 366da9b7..abc4e5ed 100644 --- a/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Script/Internal.hs +++ b/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Script/Internal.hs @@ -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