module Function where

import Prelude ( Integer, Int, (-) )


infixr 9 . ;

(.) :: (b -> c) -> (a -> b) -> a -> c ;
(b -> c
f . :: forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> b
g) a
x = b -> c
f (a -> b
g a
x) ;

infixr 0 $ ;

($) :: (a -> b) -> a -> b ;
a -> b
f $ :: forall a b. (a -> b) -> a -> b
$ a
x = a -> b
f a
x ;

-- $!
applyStrict :: (Integer -> a) -> (Integer -> a) ;
applyStrict :: forall a. (Integer -> a) -> Integer -> a
applyStrict Integer -> a
f Integer
0 = Integer -> a
f Integer
0 ;
applyStrict Integer -> a
f Integer
x = Integer -> a
f Integer
x ;


flip :: (b -> a -> c) -> a -> b -> c ;
flip :: forall b a c. (b -> a -> c) -> a -> b -> c
flip b -> a -> c
f a
x b
y = b -> a -> c
f b
y a
x ;

id :: a -> a ;
id :: forall a. a -> a
id a
x = a
x ;

nest :: Int -> (a -> a) -> a -> a ;
nest :: forall a. Int -> (a -> a) -> a -> a
nest Int
0 a -> a
_ a
x = a
x ;
nest Int
n a -> a
f a
x = Int -> (a -> a) -> a -> a
forall a. Int -> (a -> a) -> a -> a
nest (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1) a -> a
f (a -> a
f a
x) ;

const :: a -> b -> a ;
const :: forall a b. a -> b -> a
const a
a b
_ = a
a ;

fix :: (a -> a) -> a ;
fix :: forall a. (a -> a) -> a
fix a -> a
f = a -> a
f ((a -> a) -> a
forall a. (a -> a) -> a
fix a -> a
f) ;