@@ -7,10 +7,10 @@ import Control.Monad (when)
77import Control.Monad.Reader (MonadReader (.. ), ReaderT (.. ))
88import Control.Monad.Writer (MonadWriter (.. ), execWriterT )
99import Data.Bifunctor (Bifunctor (.. ))
10- import Data.LinkedHashMap (LinkedHashMap )
11- import Data.LinkedHashMap qualified as LinkedHashMap (empty , filterWithKey , insert , member , toList )
1210import Data.Map (Map )
1311import Data.Map qualified as Map (fromList , insert , lookup )
12+ import Data.Map.Ordered (OMap )
13+ import Data.Map.Ordered qualified as OMap (assocs , empty , filter , member , (>|) )
1414import Data.Maybe (catMaybes )
1515import Data.Set (Set )
1616import Data.Set qualified as Set (fromList , member , singleton )
@@ -48,7 +48,7 @@ functionaliseResources ::
4848 m (Prog builtin )
4949functionaliseResources prog =
5050 logCompilerPass MidDetail currentPass $ do
51- runReaderT (functionaliseProg prog) (FuncState LinkedHashMap . empty mempty )
51+ runReaderT (functionaliseProg prog) (FuncState OMap . empty mempty )
5252
5353--------------------------------------------------------------------------------
5454-- Utilities
@@ -57,14 +57,14 @@ currentPass :: CompilerPass
5757currentPass = " resource functionalisation"
5858
5959data FuncState builtin = FuncState
60- { resourceDeclarations :: LinkedHashMap Name (Type builtin ),
60+ { resourceDeclarations :: OMap Name (Type builtin ),
6161 resourceUsageFreeCtx :: GenericFreeCtx [Name ]
6262 }
6363
6464addResourceDeclaration :: Identifier -> Type builtin -> FuncState builtin -> FuncState builtin
6565addResourceDeclaration resource typ FuncState {.. } =
6666 FuncState
67- { resourceDeclarations = LinkedHashMap. insert (nameOf resource) typ resourceDeclarations ,
67+ { resourceDeclarations = resourceDeclarations OMap. >| (nameOf resource, typ) ,
6868 ..
6969 }
7070
@@ -134,7 +134,7 @@ findResourceUses e = do
134134 args' <- traverse (traverse recGo) args
135135 FuncState {.. } <- ask
136136 let name = nameOf ident
137- when (name `LinkedHashMap .member` resourceDeclarations) $ do
137+ when (name `OMap .member` resourceDeclarations) $ do
138138 tell (Set. singleton name)
139139 let resourceArgs = lookupInFreeCtx ident resourceUsageFreeCtx
140140 tell (Set. fromList resourceArgs)
@@ -171,7 +171,7 @@ replaceResourceUses (mkBinder, binders, binderNames) initialExpr = do
171171 return $ BoundVar p resourceIx
172172
173173 newFun <-
174- if name `LinkedHashMap .member` resourceDeclarations
174+ if name `OMap .member` resourceDeclarations
175175 then mkResourceVar name
176176 else return $ FreeVar p ident
177177
@@ -188,8 +188,8 @@ createBinders ::
188188 m (Binder builtin -> Expr builtin -> Expr builtin , [Binder builtin ], [Name ])
189189createBinders isType p idents = do
190190 FuncState {.. } <- ask
191- let identsAndTypes = LinkedHashMap. filterWithKey (\ i _ -> Set. member i idents) resourceDeclarations
192- let identsAndTypesList = LinkedHashMap. toList identsAndTypes
191+ let identsAndTypes = OMap. filter (\ i _ -> Set. member i idents) resourceDeclarations
192+ let identsAndTypesList = OMap. assocs identsAndTypes
193193 let mkBindingForm ident
194194 | isType = BinderDisplayForm OnlyType True
195195 | otherwise = BinderDisplayForm (OnlyName (nameOf ident)) True
0 commit comments