unpack-funcs 0.1.1 → 0.1.2
raw patch · 3 files changed
+16/−6 lines, 3 files
Files
- Control/Monad/Unpack.hs +3/−1
- Control/Monad/Unpack/TH.hs +9/−1
- unpack-funcs.cabal +4/−4
Control/Monad/Unpack.hs view
@@ -1,8 +1,9 @@ {-# LANGUAGE TypeOperators, TypeFamilies, TemplateHaskell #-}-module Control.Monad.Unpack (module Control.Monad.Unpack.Class, (:~>), unpack, ($~)) where+module Control.Monad.Unpack (module Control.Monad.Unpack.Class, (:~>), unpack, ($~), unpack1Instance, unpackInstance, noUnpackInstance) where import Data.Functor.Identity +import Control.Monad import Control.Monad.Unpack.Class import Control.Monad.Unpack.TH @@ -46,6 +47,7 @@ $(noUnpackInstance ''Bool) $(noUnpackInstance ''Maybe) $(noUnpackInstance ''Either)+$(liftM concat (mapM tupleInstance [2..10])) instance Unpackable () where newtype UnpackedReaderT () m a = Result {runResult :: m a}
Control/Monad/Unpack/TH.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TemplateHaskell, QuasiQuotes #-}-module Control.Monad.Unpack.TH (unpack1Instance, unpackInstance, noUnpackInstance) where+module Control.Monad.Unpack.TH (unpack1Instance, unpackInstance, noUnpackInstance, tupleInstance) where import Control.Monad import Control.Monad.Unpack.Class@@ -41,6 +41,14 @@ tyVarBndrName :: TyVarBndr -> Name tyVarBndrName (PlainTV var) = var tyVarBndrName (KindedTV var _) = var++tupleInstance :: Int -> Q [Dec]+tupleInstance n = do+ argNames <- mapM (\ c -> newName [c]) (take n ['a'..])+ unpacker [ClassP ''Unpackable [VarT argName] | argName <- argNames]+ (tupleTypeName n)+ (map PlainTV argNames)+ (NormalC (tupleDataName n) [(NotStrict, VarT argName) | argName <- argNames]) unpacker1 :: Cxt -> Name -> [TyVarBndr] -> Con -> Q [Dec] unpacker1 cxt tyCon tyArgs con = case conArgs con of
unpack-funcs.cabal view
@@ -1,5 +1,5 @@ name: unpack-funcs-version: 0.1.1+version: 0.1.2 cabal-version: >= 1.6 tested-with: GHC category: Control@@ -22,8 +22,8 @@ ghc-options: -Wall -fno-warn-name-shadowing -fno-warn-orphans exposed-modules: - Control.Monad.Unpack,- Control.Monad.Unpack.TH+ Control.Monad.Unpack other-modules:- Control.Monad.Unpack.Class+ Control.Monad.Unpack.Class,+ Control.Monad.Unpack.TH }