{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE Strict #-} module GHC.CmmToAsm.Wasm.Utils ( widthMax, detEltsUFM, detEltsUniqMap, builderCommas, ) where import Data.ByteString.Builder import Data.List (intersperse, sortOn) import GHC.Cmm import GHC.Prelude import GHC.Types.Unique.FM import GHC.Types.Unique.Map widthMax :: Width -> Integer widthMax :: Width -> Integer widthMax Width w = (Integer 1 forall a. Bits a => a -> Int -> a `shiftL` Width -> Int widthInBits Width w) forall a. Num a => a -> a -> a - Integer 1 detEltsUFM :: Ord k => UniqFM k0 (k, a) -> [(k, a)] detEltsUFM :: forall k k0 a. Ord k => UniqFM k0 (k, a) -> [(k, a)] detEltsUFM = forall b a. Ord b => (a -> b) -> [a] -> [a] sortOn forall a b. (a, b) -> a fst forall b c a. (b -> c) -> (a -> b) -> a -> c . forall key elt. UniqFM key elt -> [elt] nonDetEltsUFM detEltsUniqMap :: Ord k => UniqMap k a -> [(k, a)] detEltsUniqMap :: forall k a. Ord k => UniqMap k a -> [(k, a)] detEltsUniqMap = forall b a. Ord b => (a -> b) -> [a] -> [a] sortOn forall a b. (a, b) -> a fst forall b c a. (b -> c) -> (a -> b) -> a -> c . forall k a. UniqMap k a -> [(k, a)] nonDetEltsUniqMap builderCommas :: (a -> Builder) -> [a] -> Builder builderCommas :: forall a. (a -> Builder) -> [a] -> Builder builderCommas a -> Builder f [a] xs = forall a. Monoid a => [a] -> a mconcat (forall a. a -> [a] -> [a] intersperse Builder ", " (forall a b. (a -> b) -> [a] -> [b] map a -> Builder f [a] xs))