relude-0.2.0: Custom prelude from Kowainik

Copyright(c) 2018 Kowainik
LicenseMIT
MaintainerKowainik <xrom.xkov@gmail.com>
Safe HaskellSafe
LanguageHaskell2010

Relude.Extra.Newtype

Description

Functions to ease work with newtypes.

Synopsis

Documentation

un :: forall b a. Coercible a b => a -> b Source #

Unwraps value from newtype.

>>> newtype Size = Size Int deriving Show
>>> un @Int (Size 5)
5
>>> un (Size 5) == length ['a', 'x', 'b']
False

wrap :: forall b a. Coercible a b => a -> b Source #

Wraps value to newtype. Behaves exactly as un but has more meaningnful name in case you need to convert some value to newtype.

>>> newtype Flag = Flag Bool deriving (Show, Eq)
>>> wrap False == Flag True
False

under :: forall b a. Coercible a b => (b -> b) -> a -> a Source #

Applies function to the content of newtype. This function is not supposed to be used on newtypes that are created with the help of smart constructors.

>>> newtype Foo = Foo Bool deriving Show
>>> under not (Foo True)
Foo False
>>> newtype Bar = Bar String deriving Show
>>> under (filter (== 'a')) (Bar "abacaba")
Bar "aaaa"