container-1.0: src/Data/Container/Parametrized.hs
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE PolyKinds #-}
module Data.Container.Parametrized where
--import Prologue
--import Data.Container.Class
--import Data.Container.Poly
--import Data.Container.Weak
--import Data.Layer
--newtype Parametrized t (m :: * -> *) a = Parametrized { _parametrized :: t (m a) } deriving (Show, Functor, Traversable, Foldable, FromList, Monoid, Default)
--type instance Item (Parametrized t m a) = Item (Unwrapped (Parametrized t m a))
--type instance ModsOf (cls :: k) (Parametrized t m a) = ModsOf cls (Unwrapped (Parametrized t m a))
--type instance DataStoreOf (Parametrized t m a) = DataStoreOf (Unwrapped (Parametrized t m a))
--type instance ContainerOf (Parametrized t m a) = ContainerOf (Unwrapped (Parametrized t m a))
---- Wrappers & layers
--type instance Unlayered (Parametrized t m a) = Unwrapped (Parametrized t m a)
--instance Layered (Parametrized t m a)
--instance Wrapped (Parametrized t m a) where
-- type Unwrapped (Parametrized t m a) = t (m a)
-- _Wrapped' = iso (\(Parametrized c) -> c) Parametrized
---- Instances
--instance IsContainer (t (m a)) => IsContainer (Parametrized t m a) where fromContainer = Parametrized . fromContainer
--instance HasContainer (t (m a)) => HasContainer (Parametrized t m a) where container = layered . container
--type instance ElementOf (Parametrized t m a) = ElementOf (t (m a))
--type instance IndexOf el (Parametrized t m a) = IndexOf el (t (m a))
--type instance HomoIndexOf (Parametrized t m) = HomoIndexOf m
---- Lenses
--makeLenses ''Parametrized