unpack-funcs 0.2.0 → 0.3.0
raw patch · 2 files changed
+16/−4 lines, 2 files
Files
- Control/Monad/Unpack/TH.hs +15/−3
- unpack-funcs.cabal +1/−1
Control/Monad/Unpack/TH.hs view
@@ -5,7 +5,13 @@ import Control.Monad.Unpack.Class import Language.Haskell.TH+import System.IO.Unsafe+import Data.IORef +-- Apparently, newName still generates name conflicts in GHC 7.2? Really, really weird.+uglyUnique :: IORef Int+uglyUnique = unsafePerformIO (newIORef 0)+ -- | Unpack wrappers around primitive types, like 'Int'. unpack1Instance :: Name -> Q [Dec] unpack1Instance tycon = do@@ -50,6 +56,9 @@ (map PlainTV argNames) (NormalC (tupleDataName n) [(NotStrict, VarT argName) | argName <- argNames]) +getUnique :: Q Int+getUnique = runIO (atomicModifyIORef uglyUnique (\ n -> (n+1, n)))+ unpacker1 :: Cxt -> Name -> [TyVarBndr] -> Con -> Q [Dec] unpacker1 cxt tyCon tyArgs con = case conArgs con of (conName, conArgs) -> do@@ -61,7 +70,8 @@ inline, PragmaD $ InlineP (mkName "unpackedReaderT") inline]- funcName <- newName "UnpackedReaderT"+ u <- getUnique+ funcName <- newName $ "UnpackedReaderTCon" ++ show u mName <- newName "m" aName <- newName "a" fName <- newName "func"@@ -88,7 +98,8 @@ inline, PragmaD $ InlineP (mkName "unpackedReaderT") inline]- funcName <- newName "UnpackedReaderT"+ u <- getUnique+ funcName <- newName $ "UnpackedReaderT" ++ show u mName <- newName "m" aName <- newName "a" fName <- newName "func"@@ -120,7 +131,8 @@ inline, PragmaD $ InlineP (mkName "unpackedReaderT") inline]- funcName <- newName "UnpackedReaderT"+ u <- getUnique+ funcName <- newName $ "UnpackedReaderT" ++ show u mName <- newName "m" aName <- newName "a" fName <- newName "func"
unpack-funcs.cabal view
@@ -1,5 +1,5 @@ name: unpack-funcs-version: 0.2.0+version: 0.3.0 cabal-version: >= 1.6 tested-with: GHC category: Control