# barbies-layered
[](http://hackage.haskell.org/package/barbies-layered)

[](https://github.com/sponsors/kakkun61)
This is like [barbies](https://hackage.haskell.org/package/barbies) but these clothes are layered.
For example when there is a following data type,
```haskell
data Foo = Foo { foo :: [Int] }
```
barbies requires a following.
```haskell
data Foo f = Foo { foo :: f [Int] }
```
But in case of barbies-layered,
```haskell
data Foo f = Foo { foo :: f [f Int] }
```
A typical difference is a type of `bmap`.
```haskell
-- barbies
type FunctorB :: ((k -> Type) -> Type) -> Constraint
class FunctorB b where
bmap :: (forall a. f a -> g a) -> b f -> b g
-- barbies-layered
type FunctorB :: ((Type -> Type) -> Type) -> Constraint
class FunctorB b where
bmap :: (Functor f, Functor g) => (forall a. f a -> g a) -> b f -> b g
```