-- GeNeRaTeD fOr: ../../CBS/Funcons/Computations/Control flow/Normal/Iterating/Definite/Filtering collections/multiset-filter.aterm {-# LANGUAGE OverloadedStrings #-} module Funcons.Core.Computations.ControlFlow.Normal.Iterating.Definite.FilteringCollections.MultisetFilter where import Funcons.EDSL entities = [] types = typeEnvFromList [] funcons = libFromList [("multiset-filter",PartiallyStrictFuncon [NonStrict,Strict] stepMultiset_filter)] -- | -- /multiset-filter(P,MS)/ deletes all values from the the multiset /MS/ that do -- not satisfy the predicate /P/ . /P/ is given a /values/ //naturals/ pair. multiset_filter_ fargs = FApp "multiset-filter" (FTuple fargs) stepMultiset_filter fargs@[arg1,arg2] = evalRules [rewrite1] [] where rewrite1 = do let env = emptyEnv env <- fsMatch fargs [PMetaVar "F",PAnnotated (PMetaVar "MS") (TName "values")] env rewriteTermTo (TApp "list-to-multiset" (TTuple [TApp "list-filter" (TTuple [TVar "F",TApp "multiset-to-list" (TTuple [TVar "MS"])])])) env stepMultiset_filter fargs = sortErr (FApp "multiset-filter" (FTuple fargs)) "invalid number of arguments"