Copyright | (c) 2018 Kowainik |
---|---|
License | MIT |
Maintainer | Kowainik <xrom.xkov@gmail.com> |
Safe Haskell | Safe |
Language | Haskell2010 |
Functions to ease work with newtypes.
Synopsis
- un :: forall a n. Coercible a n => n -> a
- wrap :: forall n a. Coercible a n => a -> n
- under :: forall n a. Coercible a n => (n -> n) -> a -> a
- under2 :: forall n a. Coercible a n => (n -> n -> n) -> a -> a -> a
- underF2 :: forall n a. Coercible a (n a) => (n a -> n a -> n a) -> a -> a -> a
- (#.) :: Coercible b c => (b -> c) -> (a -> b) -> a -> c
Documentation
un :: forall a n. Coercible a n => n -> a 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 n a. Coercible a n => a -> n 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 n a. Coercible a n => (n -> n) -> a -> a Source #
Applies function to the content of newtype
. This function is not supposed
to be used on newtype
s 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"
under2 :: forall n a. Coercible a n => (n -> n -> n) -> a -> a -> a Source #
Lift binary function for newtype
s to work over underlying newtype
representation.
>>>
under2 @(Sum Int) (<>) (3 :: Int) 4
7>>>
under2 @All (<>) True False
False