relude-0.6.0.0: relude.cabal
cabal-version: 2.4
name: relude
version: 0.6.0.0
synopsis: Custom prelude from Kowainik
description:
@__relude__@ is an alternative prelude library. If you find the default
@Prelude@ unsatisfying, despite its advantages, consider using @relude@
instead.
.
== Relude design goals
.
* __Avoid all [partial functions](https://www.reddit.com/r/haskell/comments/5n51u3/why_are_partial_functions_as_in_head_tail_bad/)__
(like @head :: [a] -> a@). The types of partial functions lie about their
behavior and usage of such functions can lead to the unexpected bugs. Though
you can still use some unsafe functions from @Relude.Unsafe@ module, but they
are not exported by default.
.
* __Type-safety__. We like to make invalid states unrepresantable. And if it's
possible to express this concept through the types then we will do it.
/Example:/ @ whenNotNull :: Applicative f => [a] -> (NonEmpty a -> f ()) -> f () @
.
* __Performance.__ Prefer @Text@ over @[String](https://www.reddit.com/r/haskell/comments/29jw0s/whats_wrong_with_string/)@,
use spaceleak-free functions (like our custom @sum@ and @product@),
introduce @\{\-\# INLINE \#\-\}@ and @\{\-\# SPECIALIZE \#\-\}@ pragmas where
appropriate.
.
* __Minimalism__ (low number of dependencies). We don't force users of @relude@ to
stick to some specific lens or text formatting or logging library. If
possible, @relude@ tries to depend only on boot libraies.
.
* __Convenience__ (like lifted to @MonadIO@ functions, more reexports).
Despite minimalism, we want to bring common types and functions (like
@containers@ and @bytestring@) into scope because they are used in almost
every application anyways.
.
* __Provide excellent documentation.__
.
1. Tutorial
.
2. Migration guide from @Prelude@
.
3. Haddock for every function with examples tested by
[doctest](http://hackage.haskell.org/package/doctest)).
.
4. Documentation regarding [internal module structure](http://hackage.haskell.org/package/relude/docs/Relude.html)
.
5. @relude@-specific [HLint](http://hackage.haskell.org/package/hlint) rules: @[.hlint.yaml](https://github.com/kowainik/relude/blob/master/.hlint.yaml)@
.
* __User-friendliness.__ Ability to quickly migrate to @relude@ if you're familiar
with the common libraries like @text@ and @containers@. @relude@ also makes heavy usage
of custom type errors to provide better UX.
.
* __Exploration.__ Experiment with new ideas and proposals without
introducing breaking changes. @relude@ uses the approach with @Extra.*@
modules which are not exported by default so it's quite easy to bring
something new and let users decide to use it or not.
homepage: https://github.com/kowainik/relude
bug-reports: https://github.com/kowainik/relude/issues
license: MIT
license-file: LICENSE
author: Dmitrii Kovanikov, Veronika Romashkina, Stephen Diehl, Serokell
maintainer: Kowainik <xrom.xkov@gmail.com>
copyright: 2016 Stephen Diehl, 2016-2018 Serokell, 2018-2019 Kowainik
category: Prelude
stability: stable
build-type: Simple
extra-doc-files: CHANGELOG.md
CONTRIBUTING.md
README.md
tested-with: GHC == 8.0.2
GHC == 8.2.2
GHC == 8.4.4
GHC == 8.6.5
GHC == 8.8.1
source-repository head
type: git
location: git@github.com:kowainik/relude.git
common common-options
build-depends: base >= 4.9 && < 4.14
ghc-options: -Wall
-Wcompat
-Widentities
-Wincomplete-uni-patterns
-Wincomplete-record-updates
-fwarn-implicit-prelude
if impl(ghc >= 8.2)
ghc-options: -fhide-source-paths
default-language: Haskell2010
default-extensions: InstanceSigs
NoImplicitPrelude
OverloadedStrings
ScopedTypeVariables
TypeApplications
library
import: common-options
hs-source-dirs: src
exposed-modules:
Relude
Relude.Applicative
Relude.Base
Relude.Bool
Relude.Bool.Guard
Relude.Bool.Reexport
Relude.Container
Relude.Container.One
Relude.Container.Reexport
Relude.Debug
Relude.DeepSeq
Relude.Exception
Relude.File
Relude.Foldable
Relude.Foldable.Fold
Relude.Foldable.Reexport
Relude.Function
Relude.Functor
Relude.Functor.Fmap
Relude.Functor.Reexport
Relude.Lifted
Relude.Lifted.Concurrent
Relude.Lifted.Exit
Relude.Lifted.File
Relude.Lifted.IORef
Relude.Lifted.Terminal
Relude.List
Relude.List.NonEmpty
Relude.List.Reexport
Relude.Monad
Relude.Monad.Either
Relude.Monad.Maybe
Relude.Monad.Reexport
Relude.Monad.Trans
Relude.Monoid
Relude.Nub
Relude.Numeric
Relude.Print
Relude.String
Relude.String.Conversion
Relude.String.Reexport
-- not exported by default
Relude.Extra.Bifunctor
Relude.Extra.CallStack
Relude.Extra.Enum
Relude.Extra.Foldable
Relude.Extra.Foldable1
Relude.Extra.Group
Relude.Extra.Lens
Relude.Extra.Map
Relude.Extra.Newtype
Relude.Extra.Tuple
Relude.Extra.Type
Relude.Extra.Validation
Relude.Unsafe
build-depends: bytestring ^>= 0.10
, containers >= 0.5.7 && < 0.7
, deepseq ^>= 1.4
, ghc-prim >= 0.4.0.0 && < 0.6
, hashable >= 1.2 && < 1.4
, mtl ^>= 2.2
, stm >= 2.4 && < 2.6
, text ^>= 1.2
, transformers ^>= 0.5
, unordered-containers >= 0.2.7 && < 0.3
test-suite relude-test
import: common-options
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Spec.hs
other-modules: Test.Relude.Property
Test.Relude.Extra.Validation.Property
build-depends: relude
, bytestring
, text
, hedgehog ^>= 1.0
ghc-options: -threaded
test-suite relude-doctest
import: common-options
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Doctest.hs
build-depends: relude
, doctest
, Glob
, QuickCheck
ghc-options: -threaded
benchmark relude-benchmark
import: common-options
type: exitcode-stdio-1.0
hs-source-dirs: benchmark
main-is: Main.hs
build-depends: relude
, containers
, gauge
, unordered-containers
ghc-options: -threaded
-rtsopts
-with-rtsopts=-N