homepage: https://github.com/kakkun61/barbies-layered
changelog-type: markdown
hash: 1cc029978ee7360649b2538f3880bc14830f9c22be8804b683571b671699c3d4
test-bench-deps:
  barbies: -any
  base: ==4.*
  hspec: -any
  doctest: -any
  barbies-layered: -any
maintainer: kazuki.okamoto@kakkun61.com
synopsis: Barbies with layered clothes.
changelog: |
  # Changelog for barbies-layered

  ## 0.1.0.0

  *2021.07.16*

  Initial release.

  - `Barbies.Bare.Layered.BareB`
  - `Data.Functor.Barbie.Layered.FunctorB`
basic-deps:
  barbies: -any
  base: '>=4 && <5'
  transformers: -any
all-versions:
- 0.1.0.0
author: Kazuki Okamoto (岡本和樹)
latest: 0.1.0.0
description-type: markdown
description: |
  # barbies-layered

  [![Hackage](https://matrix.hackage.haskell.org/api/v2/packages/barbies-layered/badge)](http://hackage.haskell.org/package/barbies-layered)

  ![CI](https://github.com/kakkun61/barbies-layered/workflows/main/badge.svg)

  [![Sponsor](https://img.shields.io/badge/Sponsor-%E2%9D%A4-red?logo=GitHub)](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
  ```
license-name: Apache-2.0

Update from Hackage at 2021-07-15T15:42:20Z
Update from Hackage at 2021-07-15T15:42:20Z
