packages feed

typeparams 0.0.2.0 → 0.0.3.0

raw patch · 3 files changed

+64/−19 lines, 3 filesdep −MonadRandomdep ~base

Dependencies removed: MonadRandom

Dependency ranges changed: base

Files

src/Data/Params.hs view
@@ -36,6 +36,7 @@     , TypeLens (..)     , GetParam     , SetParam+    , SetParam'     , Base     , _base     , zoom@@ -364,6 +365,7 @@ -- type family SetParam (p::k1) (a::k2) (t:: *) :: * type family GetParam (p::k1) (t:: *) :: k3 type family SetParam (p::k1) (a::k2) (t:: *) :: *+type family SetParam' (p :: * -> Constraint) (a :: *) (t :: *) :: *  type family Zoom (p :: k1) :: k2 type family EyePiece (p :: k1) :: k2@@ -379,6 +381,7 @@ _base = TypeLens type instance GetParam Base t = t type instance SetParam Base (c :: *) t = c+type instance SetParam' Base c t = c  type ParamIndex p =      ( ReifiableConstraint (ApplyConstraint_GetConstraint p)@@ -567,20 +570,35 @@ -- > data NearestNeighbor (k :: Param Nat) (maxdist :: Param Float) elem = ... -- > mkParams ''NearestNeighbor --- mkParams :: Name -> Q [Dec] mkParams dataname = do     info <- TH.reify dataname++    -- if dataname refers to a type synonym, then extract the principal+    -- constructor and call mkParams' on that+    case info of +        TyConI (TySynD _ _             (ConT dataname')      ) -> mkParams' dataname'+        TyConI (TySynD _ _       (AppT (ConT dataname') _)   ) -> mkParams' dataname'+        TyConI (TySynD _ _ (AppT (AppT (ConT dataname') _) _)) -> mkParams' dataname'+        otherwise -> mkParams' dataname++-- this function assumes that dataname is not a type synonym+mkParams' :: Name -> Q [Dec]+mkParams' dataname = do+    info <- TH.reify dataname     let tyVarBndrL = case info of+            FamilyI (FamilyD _ _ xs _) _ -> xs             TyConI (NewtypeD _ _ xs _ _) -> xs             TyConI (DataD _ _ xs _ _) -> xs-            FamilyI (FamilyD _ _ xs _) _ -> xs+            otherwise -> error $ "mkParams case; info="++show info -    let (tyVarBndrL_Config,tyVarBndrL_Star) = partition filtergo tyVarBndrL +    let tyVarBndrL' = filter go tyVarBndrL+        go (KindedTV name _) = head (nameBase name) /= '_'+        go (PlainTV name)    = head (nameBase name) /= '_'++    let (tyVarBndrL_Config,tyVarBndrL_Star) = partition filtergo tyVarBndrL'         filtergo (KindedTV _ (AppT (ConT maybe) _)) = nameBase maybe=="Config"         filtergo _ = False-    ---     getterssetters <- mkGettersSetters dataname      configparams <- forM tyVarBndrL_Config $ \tyVarBndr -> do         let paramstr = tyVarBndr2str tyVarBndr@@ -735,6 +753,8 @@ -- -- > type instance SetParam (Param_vi p) vi' (Type ... vi ... ))  -- >    = SetParam Param_vi (SetParam p vi' vi) t+-- > type instance SetParam' (Param_vi p) vi' (Type ... vi ... )) +-- >    = SetParam Param_vi (SetParam p vi' vi) t -- -- > type instance Zoom (Param_vi a) = a -- > type instance EyePiece (Param_vi a) = Param_vi@@ -786,6 +806,39 @@     let setters =              [ TySynInstD                 ( mkName "SetParam" )+                ( TySynEqn+                    [ AppT (ConT $ mkName $ "Param_"++paramstr) (VarT $ mkName "p")+                    , VarT $ mkName $ "newparam"+                    , VarT $ mkName "t" +                    ]+                    ( AppT+                        ( AppT+                            ( AppT+                                ( ConT $ mkName "SetParam" )+                                ( ConT $ mkName $ "Param_"++paramstr)+                            )+                            ( AppT+                                ( AppT+                                    ( AppT+                                        ( ConT $ mkName "SetParam" )+                                        ( VarT $ mkName "p" )+                                    )+                                    ( VarT $ mkName "newparam" )+                                )+                                ( AppT+                                    ( AppT+                                        ( ConT $ mkName "GetParam" )+                                        ( ConT $ mkName $ "Param_"++paramstr )+                                    )+                                    ( VarT $ mkName "t" )+                                )+                            )+                        )+                        ( VarT $ mkName "t" )+                    )+                )+            , TySynInstD+                ( mkName "SetParam'" )                 ( TySynEqn                     [ AppT (ConT $ mkName $ "Param_"++paramstr) (VarT $ mkName "p")                     , VarT $ mkName $ "newparam"
src/Data/Params/Vector/Unboxed.hs view
@@ -15,7 +15,6 @@  import Control.Monad import Control.Monad.Primitive-import Control.Monad.Random import Control.DeepSeq import Data.Primitive import Data.Primitive.ByteArray@@ -40,9 +39,7 @@ import Data.Params import Data.Params.Vector import Data.Params.PseudoPrim-import Unsafe.Coerce -import Language.Haskell.TH.Syntax hiding (reify) import Debug.Trace  
typeparams.cabal view
@@ -1,5 +1,5 @@ Name:                typeparams-Version:             0.0.2.0+Version:             0.0.3.0 Synopsis:            Lens-like interface for type level parameters; allows unboxed unboxed vectors and supercompilation Description:              This library provides a lens-like interface for working with type parameters. In the code:@@ -17,27 +17,22 @@ Maintainer:          mike@izbicki.me Build-Type:          Simple Cabal-Version:       >=1.8-homepage:            http://github.com/mikeizbicki/params/-bug-reports:         http://github.com/mikeizbicki/params/issues+homepage:            http://github.com/mikeizbicki/typeparams/+bug-reports:         http://github.com/mikeizbicki/typeparams/issues  Library     Build-Depends:      -        -- common dependencies-        base                >= 3 && < 5,-        template-haskell,+        base                >= 4.7 && < 5,         deepseq             >= 1.3,--        --          tagged              >= 0.7,         reflection          >= 1.3,         constraints         >= 0.3.4,-         primitive           >= 0.5,+        template-haskell    ,         ghc-prim            ,          -- examples-        vector              >= 0.10,-        MonadRandom         >= 0.1.13+        vector              >= 0.10              hs-source-dirs:              src