homepage: https://github.com/kowainik/unlift
changelog-type: markdown
hash: b8e9a37a3dae457fd02b292acb821de1573c45aa25877de8ed3bae4dcf39c8c2
test-bench-deps: {}
maintainer: Kowainik <xrom.xkov@gmail.com>
synopsis: Typeclass for monads that can be unlifted to arbitrary base monads
changelog: |
  # Changelog

  `unlift` uses [PVP Versioning][1].
  The changelog is available [on GitHub][2].

  ## 0.0.0.0

  * Initially created.

  [1]: https://pvp.haskell.org
  [2]: https://github.com/kowainik/unlift/releases
basic-deps:
  stm: ^>=2.5
  base: '>=4.13.0.0 && <4.16'
  transformers-base: ^>=0.4.5
  transformers: ^>=0.5
all-versions:
- 0.0.0.0
author: Veronika Romashkina, Dmitrii Kovanikov
latest: 0.0.0.0
description-type: markdown
description: |
  # unlift

  [![GitHub CI](https://github.com/kowainik/unlift/workflows/CI/badge.svg)](https://github.com/kowainik/unlift/actions)
  [![Hackage](https://img.shields.io/hackage/v/unlift.svg?logo=haskell)](https://hackage.haskell.org/package/unlift)
  [![MPL-2.0 license](https://img.shields.io/badge/license-MPL--2.0-blue.svg)](LICENSE)

  Typeclass for monads that can be unlifted to arbitrary base monads:

  ```haskell
  class (MonadBase b m) => MonadUnlift b m
    where
      withRunInBase :: ((forall a . m a -> b a) -> b x) -> m x
  ```

  This typeclass is helpful when writing code that is polymorphic over the base
  monad, so later you can select a different base monad for each specific use-case.

  Common usages include:

  1. Concurrent testing with [dejafu](https://hackage.haskell.org/package/dejafu).
  2. Working with code over polymorphic [PrimMonad](https://hackage.haskell.org/package/primitive-0.7.1.0/docs/Control-Monad-Primitive.html#t:PrimMonad).
license-name: MPL-2.0

Update from Hackage at 2021-04-21T05:21:35Z
Update from Hackage at 2021-04-21T05:21:35Z
