From f12f4d1e12611a6adc751f586a543db1e0b4306b Mon Sep 17 00:00:00 2001 From: voidlizard Date: Fri, 24 Jan 2025 20:45:54 +0300 Subject: [PATCH] wip, kinda function composition? --- .../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 672d7146..c31eec89 100644 --- a/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Script/Internal.hs +++ b/miscellaneous/suckless-conf/lib/Data/Config/Suckless/Script/Internal.hs @@ -942,7 +942,7 @@ internalEntries = do _ -> throwIO (TypeCheckError @C nil) entry $ bindMatch "dec" $ \case - [ LitIntVal n ] -> pure (mkInt (succ n)) + [ LitIntVal n ] -> pure (mkInt (pred n)) _ -> throwIO (TypeCheckError @C nil) entry $ bindMatch "map" $ \case @@ -974,6 +974,16 @@ internalEntries = do [ e, ListVal es ] -> pure (mkList (e:es)) _ -> throwIO (BadFormException @C nil) + entry $ bindMatch "@" $ \syn -> do + case List.uncons (reverse syn) of + Nothing -> pure nil + Just (a, []) -> pure a + Just (a, fs) -> flip fix (a, fs) $ \next -> \case + (acc, []) -> pure acc + (acc, x:xs) -> do + acc' <- apply_ x [acc] + next (acc', xs) + brief "get tail of list" $ args [arg "list" "list"] $ desc "nil if the list is empty; error if not list"