hmt-base-0.20: Haskell Music Theory Base
Safe HaskellSafe-Inferred
LanguageHaskell2010

Music.Theory.Function

Description

Data.Function related functions.

Synopsis

Documentation

type UOp t = t -> t Source #

Unary operator.

type BinOp t = t -> t -> t Source #

Binary operator.

recur_n :: Integral n => n -> (t -> t) -> t -> t Source #

Iterate the function f n times, the inital value is x.

recur_n 5 (* 2) 1 == 32
take (5 + 1) (iterate (* 2) 1) == [1,2,4,8,16,32]

const2 :: a -> b -> c -> a Source #

const of const.

const2 5 undefined undefined == 5
const (const 5) undefined undefined == 5

Predicate composition.

predicate_and :: (t -> Bool) -> (t -> Bool) -> t -> Bool Source #

&& of predicates, ie. do predicates f and g both hold at x.

predicate_all :: [t -> Bool] -> t -> Bool Source #

List variant of predicate_and, ie. foldr1

let r = [False,False,True,False,True,False]
map (predicate_all [(> 0),(< 5),even]) [0..5] == r

predicate_or :: (t -> Bool) -> (t -> Bool) -> t -> Bool Source #

|| of predicates.

predicate_any :: [t -> Bool] -> t -> Bool Source #

any of predicates, ie. logical or of list of predicates.

let r = [True,False,True,False,True,True]
map (predicate_any [(== 0),(== 5),even]) [0..5] == r

eq_on :: Eq t => (u -> t) -> u -> u -> Bool Source #

Function composition.

fmap2 :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) Source #

fmap . fmap, ie. (t -> c) -> (a -> b -> t) -> a -> b -> c.

fmap3 :: (Functor f, Functor g, Functor h) => (a -> b) -> f (g (h a)) -> f (g (h b)) Source #

fmap of fmap2, ie. (t -> d) -> (a -> b -> c -> t) -> a -> b -> c -> d.

fmap4 :: (Functor f, Functor g, Functor h, Functor i) => (a -> b) -> f (g (h (i a))) -> f (g (h (i b))) Source #

fmap of fmap3.

fmap5 :: (Functor f, Functor g, Functor h, Functor i, Functor j) => (a -> b) -> f (g (h (i (j a)))) -> f (g (h (i (j b)))) Source #

fmap of fmap4

fmap6 :: (Functor f, Functor g, Functor h, Functor i, Functor j, Functor k) => (a -> b) -> f (g (h (i (j (k a))))) -> f (g (h (i (j (k b))))) Source #

fmap of fmap5

(.:) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) infixr 8 Source #

Operator name for fmap2.

(.::) :: (Functor f, Functor g, Functor h) => (a -> b) -> f (g (h a)) -> f (g (h b)) infixr 8 Source #

Operator name for fmap3.

(.:::) :: (Functor f, Functor g, Functor h, Functor i) => (a -> b) -> f (g (h (i a))) -> f (g (h (i b))) infixr 8 Source #

Operator name for fmap4.

(.::::) :: (Functor f, Functor g, Functor h, Functor i, Functor j) => (a -> b) -> f (g (h (i (j a)))) -> f (g (h (i (j b)))) infixr 8 Source #

Operator name for fmap5.

(.:::::) :: (Functor f, Functor g, Functor h, Functor i, Functor j, Functor k) => (a -> b) -> f (g (h (i (j (k a))))) -> f (g (h (i (j (k b))))) infixr 8 Source #

Operator name for fmap6.

Bimap

bimap1f :: Bifunctor p => (a -> b) -> p a a -> p b b Source #

Apply f to both sides of p, , ie. bimap f f. This is the generic version of bimap1.

bimap1 :: (t -> u) -> (t, t) -> (u, u) Source #

Apply f to both elements of a two-tuple. Type-specialised bimap1f.