Verset
Small Haskell alternative prelude based on Protolude and Intro
Why
(At least it is not a monad tutorial)
There are some great alternative preludes around but I find most of them either too large or too opinionated.
What I’d rather have is a minimal prelude and then layer additional changes over it.
Obviously if the other preludes suit you better, then Verset is not for you :)
Goals
- Very small
- Minimal dependencies
- Removes partial functions where possible
- It be easy to switch from
Verset
to other preludes
Notes
catch
, finally
etc are not exported. This makes it easier to use e.g. Control.Exception.Safe
, UnliftIO.Exception
etc for safer exception without having to hide all the defaults
- No transformers are exposed but
lift
is
- Simple
IsString
helpers (from Protolude)
identity
rather than id
(from Protolude)
String
is not exported use [Char]
. This is to discourage its use.
If you want to reduce imports
If you want to use Verset but would rather avoid imports in all your modules. There are at least two optios
- Create a module with the imports you always use and import that along with Verset
{-# LANGUAGE NoImplicitPrelude #-}
module Verse
( (Control.Lens.^.)
, (Control.Lens.^..)
) where
import Verset
import qualified Control.Lens
module Demo where
import Verset
import Verse
import qualified Whatever as W
- Similar to the method above but reexport verset
{-# LANGUAGE NoImplicitPrelude #-}
module Verse
( module Verset
, (Control.Lens.^.)
, (Control.Lens.^..)
) where
import Verset
import qualified Control.Lens
module Demo where
import Verse
import qualified Whatever as W
But…
Personally I happy with imports as I think it makes the code more explicit. However if you want to avoid them using something like the above methods I think there are still benefits to Verset.
- Verset is not getting in your way.
- You can define company wide defaults, project wide defaults or both
Compatibility
Tested with GHC 8.7.10, 9.0.1 and 9.2.1