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 +58/−5
- src/Data/Params/Vector/Unboxed.hs +0/−3
- typeparams.cabal +6/−11
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