| Copyright | (c) 2018 Kowainik |
|---|---|
| License | MIT |
| Maintainer | Kowainik <xrom.xkov@gmail.com> |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Relude.Extra.Newtype
Description
Functions to ease work with newtypes.
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 TrueFalse
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"