projects
/
matthijs
/
master-project
/
cλash.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Put a list of builtin functions in VHDL.Constants
[matthijs/master-project/cλash.git]
/
cλash
/
CLasH
/
Utils.hs
diff --git
a/cλash/CLasH/Utils.hs
b/cλash/CLasH/Utils.hs
index 822bd55dae5c7bb286552f08178dce7600ab5009..41d7beee98a635083b2ad0c66d7aedbfc9403c46 100644
(file)
--- a/
cλash/CLasH/Utils.hs
+++ b/
cλash/CLasH/Utils.hs
@@
-3,13
+3,10
@@
module CLasH.Utils where
-- Standard Imports
import qualified Maybe
import Data.Accessor
-- Standard Imports
import qualified Maybe
import Data.Accessor
+import qualified Data.Accessor.Monad.Trans.State as MonadState
import qualified Data.Map as Map
import qualified Control.Monad as Monad
import qualified Control.Monad.Trans.State as State
import qualified Data.Map as Map
import qualified Control.Monad as Monad
import qualified Control.Monad.Trans.State as State
-
--- GHC API
-
--- Local Imports
-- Make a caching version of a stateful computatation.
makeCached :: (Monad m, Ord k) =>
-- Make a caching version of a stateful computatation.
makeCached :: (Monad m, Ord k) =>
@@
-19,14
+16,14
@@
makeCached :: (Monad m, Ord k) =>
-> State.StateT s m v -- ^ The resulting value, from the cache or freshly
-- computed.
makeCached key accessor create = do
-> State.StateT s m v -- ^ The resulting value, from the cache or freshly
-- computed.
makeCached key accessor create = do
- cache <-
getA
accessor
+ cache <-
MonadState.get
accessor
case Map.lookup key cache of
-- Found in cache, just return
Just value -> return value
-- Not found, compute it and put it in the cache
Nothing -> do
value <- create
case Map.lookup key cache of
-- Found in cache, just return
Just value -> return value
-- Not found, compute it and put it in the cache
Nothing -> do
value <- create
-
modA
accessor (Map.insert key value)
+
MonadState.modify
accessor (Map.insert key value)
return value
unzipM :: (Monad m) =>
return value
unzipM :: (Monad m) =>
@@
-50,3
+47,10
@@
isJustM = Monad.liftM Maybe.isJust
andM, orM :: (Monad m) => m [Bool] -> m Bool
andM = Monad.liftM and
orM = Monad.liftM or
andM, orM :: (Monad m) => m [Bool] -> m Bool
andM = Monad.liftM and
orM = Monad.liftM or
+
+mapAccumLM :: (Monad m) => (acc -> x -> m (acc, y)) -> acc -> [x] -> m (acc, [y])
+mapAccumLM _ s [] = return (s, [])
+mapAccumLM f s (x:xs) = do
+ (s', y ) <- f s x
+ (s'', ys) <- mapAccumLM f s' xs
+ return (s'', y:ys)