funcons-tools-0.2.0.15: cbs/Funcons/Core/Computations/Normal/Memos/Memos.hs
-- GeNeRaTeD fOr: /home/thomas/repos/plancomps/CBS-beta/Unstable-Funcons-beta/Computations/Normal/Memos/Memos.cbs
{-# LANGUAGE OverloadedStrings #-}
module Funcons.Core.Computations.Normal.Memos.Memos where
import Funcons.EDSL
import Funcons.Operations hiding (Values,libFromList)
entities = []
types = typeEnvFromList
[]
funcons = libFromList
[("initialise-memos",NonStrictFuncon stepInitialise_memos),("memo-value",PartiallyStrictFuncon [Strict,NonStrict] NonStrict stepMemo_value),("initialise-memo-value",StrictFuncon stepInitialise_memo_value),("memo-value-recall",StrictFuncon stepMemo_value_recall)]
initialise_memos_ fargs = FApp "initialise-memos" (fargs)
stepInitialise_memos fargs =
evalRules [] [step1]
where step1 = do
let env = emptyEnv
env <- lifted_fsMatch fargs [PMetaVar "X"] env
env <- getMutPatt "memo-map" [VPWildCard] env
putMutTerm "memo-map" (TApp "map" []) env
stepTermTo (TVar "X") env
memo_value_ fargs = FApp "memo-value" (fargs)
stepMemo_value fargs =
evalRules [rewrite1] []
where rewrite1 = do
let env = emptyEnv
env <- fsMatch fargs [PAnnotated (PMetaVar "K") (TName "ground-values"),PMetaVar "X"] env
rewriteTermTo (TApp "else" [TApp "memo-value-recall" [TVar "K"],TApp "give" [TVar "X",TApp "sequential" [TApp "else" [TApp "initialise-memo-value" [TVar "K",TName "given"],TName "null-value"],TApp "memo-value-recall" [TVar "K"]]]]) env
initialise_memo_value_ fargs = FApp "initialise-memo-value" (fargs)
stepInitialise_memo_value fargs =
evalRules [] [step1,step2]
where step1 = do
let env = emptyEnv
env <- lifted_vsMatch fargs [VPAnnotated (VPMetaVar "K") (TName "ground-values"),VPAnnotated (VPMetaVar "V") (TName "values")] env
env <- getMutPatt "memo-map" [VPMetaVar "M"] env
env <- lifted_sideCondition (SCPatternMatch (TApp "map-unite" [TVar "M",TMap [TBinding (TVar "K") (TVar "V")]]) [VPMetaVar "M'"]) env
putMutTerm "memo-map" (TVar "M'") env
stepTermTo (TName "null-value") env
step2 = do
let env = emptyEnv
env <- lifted_vsMatch fargs [VPAnnotated (VPMetaVar "K") (TName "ground-values"),VPAnnotated (VPMetaVar "V") (TName "values")] env
env <- getMutPatt "memo-map" [VPMetaVar "M"] env
env <- lifted_sideCondition (SCPatternMatch (TApp "map-unite" [TVar "M",TMap [TBinding (TVar "K") (TVar "V")]]) []) env
putMutTerm "memo-map" (TVar "M") env
stepTermTo (TName "fail") env
memo_value_recall_ fargs = FApp "memo-value-recall" (fargs)
stepMemo_value_recall fargs =
evalRules [] [step1,step2]
where step1 = do
let env = emptyEnv
env <- lifted_vsMatch fargs [VPAnnotated (VPMetaVar "K") (TName "ground-values")] env
env <- getMutPatt "memo-map" [VPMetaVar "M"] env
env <- lifted_sideCondition (SCPatternMatch (TApp "lookup" [TVar "M",TVar "K"]) [VPMetaVar "V"]) env
putMutTerm "memo-map" (TVar "M") env
stepTermTo (TVar "V") env
step2 = do
let env = emptyEnv
env <- lifted_vsMatch fargs [VPAnnotated (VPMetaVar "K") (TName "ground-values")] env
env <- getMutPatt "memo-map" [VPMetaVar "M"] env
env <- lifted_sideCondition (SCPatternMatch (TApp "lookup" [TVar "M",TVar "K"]) []) env
putMutTerm "memo-map" (TVar "M") env
stepTermTo (TName "fail") env