planet-mitchell-0.1.0: Planet Mitchell

Function

Synopsis
• ($) :: (a -> b) -> a -> b • ($!) :: (a -> b) -> a -> b
• (&) :: a -> (a -> b) -> b
• asTypeOf :: a -> a -> a
• const :: a -> b -> a
• fix :: (a -> a) -> a
• flip :: (a -> b -> c) -> b -> a -> c
• loop :: (a -> Either a b) -> a -> b
• on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
• until :: (a -> Bool) -> (a -> a) -> a -> a
• curry :: ((a, b) -> c) -> a -> b -> c
• curry3 :: ((a, b, c) -> d) -> a -> b -> c -> d
• uncurry :: (a -> b -> c) -> (a, b) -> c
• uncurry3 :: (a -> b -> c -> d) -> (a, b, c) -> d
• newtype Endo a = Endo {}
• newtype Op a b = Op {}

Documentation

($) :: (a -> b) -> a -> b infixr 0 # Application operator. This operator is redundant, since ordinary application (f x) means the same as (f$ x). However, $ has low, right-associative binding precedence, so it sometimes allows parentheses to be omitted; for example: f$ g $h x = f (g (h x)) It is also useful in higher-order situations, such as map ($ 0) xs, or zipWith ($) fs xs. ($!) :: (a -> b) -> a -> b infixr 0 #

Strict (call-by-value) application operator. It takes a function and an argument, evaluates the argument to weak head normal form (WHNF), then calls the function with that value.

(&) :: a -> (a -> b) -> b infixl 1 #

& is a reverse application operator. This provides notational convenience. Its precedence is one higher than that of the forward application operator $, which allows & to be nested in $.

>>> 5 & (+1) & show
"6"


Since: base-4.8.0.0

asTypeOf :: a -> a -> a #

asTypeOf is a type-restricted version of const. It is usually used as an infix operator, and its typing forces its first argument (which is usually overloaded) to have the same type as the second.

const :: a -> b -> a #

const x is a unary function which evaluates to x for all inputs.

>>> const 42 "hello"
42

>>> map (const 42) [0..3]
[42,42,42,42]


fix :: (a -> a) -> a #

fix f is the least fixed point of the function f, i.e. the least defined x such that f x = x.

For example, we can write the factorial function using direct recursion as

>>> let fac n = if n <= 1 then 1 else n * fac (n-1) in fac 5
120


This uses the fact that Haskell’s let introduces recursive bindings. We can rewrite this definition using fix,

>>> fix (\rec n -> if n <= 1 then 1 else n * rec (n-1)) 5
120


Instead of making a recursive call, we introduce a dummy parameter rec; when used within fix, this parameter then refers to fix' argument, hence the recursion is reintroduced.

flip :: (a -> b -> c) -> b -> a -> c #

flip f takes its (first) two arguments in the reverse order of f.

>>> flip (++) "hello" "world"
"worldhello"


loop :: (a -> Either a b) -> a -> b #

A looping operation, where the predicate returns Left as a seed for the next loop or Right to abort the loop.

loop (\x -> if x < 10 then Left $x * 2 else Right$ show x) 1 == "16"

on :: (b -> b -> c) -> (a -> b) -> a -> a -> c infixl 0 #

until :: (a -> Bool) -> (a -> a) -> a -> a #

until p f yields the result of applying f until p holds.

curry :: ((a, b) -> c) -> a -> b -> c #

curry converts an uncurried function to a curried function.

Examples

Expand
>>> curry fst 1 2
1


curry3 :: ((a, b, c) -> d) -> a -> b -> c -> d #

Converts an uncurried function to a curried function.

uncurry :: (a -> b -> c) -> (a, b) -> c #

uncurry converts a curried function to a function on pairs.

Examples

Expand
>>> uncurry (+) (1,2)
3

>>> uncurry ($) (show, 1) "1"  >>> map (uncurry max) [(1,2), (3,4), (6,8)] [2,4,8]  uncurry3 :: (a -> b -> c -> d) -> (a, b, c) -> d # Converts a curried function to a function on a triple. newtype Endo a # The monoid of endomorphisms under composition. >>> let computation = Endo ("Hello, " ++) <> Endo (++ "!") >>> appEndo computation "Haskell" "Hello, Haskell!"  Constructors  Endo FieldsappEndo :: a -> a Instances  Instance detailsDefined in Data.Pointed Methodspoint :: a -> Endo a # Generic (Endo a) Instance detailsDefined in Data.Semigroup.Internal Associated Typestype Rep (Endo a) :: * -> * # Methodsfrom :: Endo a -> Rep (Endo a) x #to :: Rep (Endo a) x -> Endo a # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Endo a -> Endo a -> Endo a #sconcat :: NonEmpty (Endo a) -> Endo a #stimes :: Integral b => b -> Endo a -> Endo a # Monoid (Endo a) Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmempty :: Endo a #mappend :: Endo a -> Endo a -> Endo a #mconcat :: [Endo a] -> Endo a # Wrapped (Endo a) Instance detailsDefined in Control.Lens.Wrapped Associated Typestype Unwrapped (Endo a) :: * # Methods_Wrapped' :: Iso' (Endo a) (Unwrapped (Endo a)) # Lower (Endo a) Instance detailsDefined in Data.Semilattice.Lower Methods t ~ Endo b => Rewrapped (Endo a) t Instance detailsDefined in Control.Lens.Wrapped type Rep (Endo a) Instance detailsDefined in Data.Semigroup.Internal type Rep (Endo a) = D1 (MetaData "Endo" "Data.Semigroup.Internal" "base" True) (C1 (MetaCons "Endo" PrefixI True) (S1 (MetaSel (Just "appEndo") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (a -> a)))) type Unwrapped (Endo a) Instance detailsDefined in Control.Lens.Wrapped type Unwrapped (Endo a) = a -> a newtype Op a b # Dual function arrows. Constructors  Op FieldsgetOp :: b -> a Instances  Instance detailsDefined in Data.Functor.Contravariant Methodscontramap :: (a0 -> b) -> Op a b -> Op a a0 #(>$) :: b -> Op a b -> Op a a0 # Monoid r => Divisible (Op r) Instance detailsDefined in Data.Functor.Contravariant.Divisible Methodsdivide :: (a -> (b, c)) -> Op r b -> Op r c -> Op r a #conquer :: Op r a # Monoid r => Decidable (Op r) Instance detailsDefined in Data.Functor.Contravariant.Divisible Methodslose :: (a -> Void) -> Op r a #choose :: (a -> Either b c) -> Op r b -> Op r c -> Op r a # Instance detailsDefined in Data.Functor.Contravariant Methodsid :: Op a a #(.) :: Op b c -> Op a b -> Op a c # Instance detailsDefined in Data.Semigroupoid Methodso :: Op j k1 -> Op i j -> Op i k1 # Floating a => Floating (Op a b) Instance detailsDefined in Data.Functor.Contravariant Methodspi :: Op a b #exp :: Op a b -> Op a b #log :: Op a b -> Op a b #sqrt :: Op a b -> Op a b #(**) :: Op a b -> Op a b -> Op a b #logBase :: Op a b -> Op a b -> Op a b #sin :: Op a b -> Op a b #cos :: Op a b -> Op a b #tan :: Op a b -> Op a b #asin :: Op a b -> Op a b #acos :: Op a b -> Op a b #atan :: Op a b -> Op a b #sinh :: Op a b -> Op a b #cosh :: Op a b -> Op a b #tanh :: Op a b -> Op a b #asinh :: Op a b -> Op a b #acosh :: Op a b -> Op a b #atanh :: Op a b -> Op a b #log1p :: Op a b -> Op a b #expm1 :: Op a b -> Op a b #log1pexp :: Op a b -> Op a b #log1mexp :: Op a b -> Op a b # Fractional a => Fractional (Op a b) Instance detailsDefined in Data.Functor.Contravariant Methods(/) :: Op a b -> Op a b -> Op a b #recip :: Op a b -> Op a b #fromRational :: Rational -> Op a b # Num a => Num (Op a b) Instance detailsDefined in Data.Functor.Contravariant Methods(+) :: Op a b -> Op a b -> Op a b #(-) :: Op a b -> Op a b -> Op a b #(*) :: Op a b -> Op a b -> Op a b #negate :: Op a b -> Op a b #abs :: Op a b -> Op a b #signum :: Op a b -> Op a b #fromInteger :: Integer -> Op a b # Semigroup a => Semigroup (Op a b) Instance detailsDefined in Data.Functor.Contravariant Methods(<>) :: Op a b -> Op a b -> Op a b #sconcat :: NonEmpty (Op a b) -> Op a b #stimes :: Integral b0 => b0 -> Op a b -> Op a b # Monoid a => Monoid (Op a b) Instance detailsDefined in Data.Functor.Contravariant Methodsmempty :: Op a b #mappend :: Op a b -> Op a b -> Op a b #mconcat :: [Op a b] -> Op a b # Wrapped (Op a b) Instance detailsDefined in Control.Lens.Wrapped Associated Typestype Unwrapped (Op a b) :: * # Methods_Wrapped' :: Iso' (Op a b) (Unwrapped (Op a b)) # t ~ Op a' b' => Rewrapped (Op a b) t Instance detailsDefined in Control.Lens.Wrapped type Unwrapped (Op a b) Instance detailsDefined in Control.Lens.Wrapped type Unwrapped (Op a b) = b -> a