-- GeNeRaTeD fOr: ../../CBS/Funcons/Computations/Control flow/Normal/Iterating/Definite/Reducing collections/list-foldl.aterm {-# LANGUAGE OverloadedStrings #-} module Funcons.Core.Computations.ControlFlow.Normal.Iterating.Definite.ReducingCollections.ListFoldl where import Funcons.EDSL entities = [] types = typeEnvFromList [] funcons = libFromList [("list-foldl",PartiallyStrictFuncon [NonStrict,Strict,Strict] stepList_foldl)] -- | -- /list-foldl(F,A,L)/ reduces a list /L/ to a single value by folding it from -- the left, using /A/ as the initial accumulator value, and iteratively -- updating the accumulator by executing the computation /F/ with the -- accumulator value and the head of the remaining list as its pair of -- arguments. list_foldl_ fargs = FApp "list-foldl" (FTuple fargs) stepList_foldl fargs@[arg1,arg2,arg3] = evalRules [rewrite1,rewrite2] [] where rewrite1 = do let env = emptyEnv env <- fsMatch fargs [PWildCard,PMetaVar "A",PValue (PList [])] env rewriteTermTo (TVar "A") env rewrite2 = do let env = emptyEnv env <- fsMatch fargs [PMetaVar "F",PMetaVar "A",PValue (PList [VPMetaVar "V",VPSeqVar "V*" StarOp])] env rewriteTermTo (TApp "list-foldl" (TTuple [TVar "F",TApp "give" (TTuple [TTuple [TVar "A",TVar "V"],TVar "F"]),TList [TVar "V*"]])) env stepList_foldl fargs = sortErr (FApp "list-foldl" (FTuple fargs)) "invalid number of arguments"