Module

Tupc.Internal

Package
purescript-tupc
Repository
rubenpieters/tupc

#JsonConfig Source

type JsonConfig = { directionX :: DirectionX, directionY :: DirectionY, ignore :: Array Char, ignoreExtra :: Array Char, originX :: OriginX, originY :: OriginY, scale :: Int, scaleX :: Maybe Int, scaleY :: Maybe Int }

#Content Source

#ConfigContent Source

type ConfigContent = { config :: Array String, content :: Content }

#JsonConfigContent Source

type JsonConfigContent = { content :: Content, jsonConfig :: JsonConfig }

#SubJsonConfigContent Source

type SubJsonConfigContent = { content :: Content, subJsonConfig :: SubRecord OptParams }

#Pos Source

newtype Pos

Constructors

Instances

#EnrichedPos Source

newtype EnrichedPos

Constructors

Instances

#OptParams Source

type OptParams = (directionX :: DirectionX, directionY :: DirectionY, ignore :: Array Char, ignoreExtra :: Array Char, originX :: OriginX, originY :: OriginY, scale :: Int, scaleX :: Maybe Int, scaleY :: Maybe Int)

Re-exports from Control.Monad.Eff

#Pure Source

type Pure a = Eff () a

The Pure type synonym represents pure computations, i.e. ones in which all effects have been handled.

The runPure function can be used to run pure computations and obtain their result.

#Eff Source

data Eff :: Row Effect -> Type -> Type

The Eff type constructor is used to represent native effects.

See Handling Native Effects with the Eff Monad for more details.

The first type parameter is a row of effects which represents the contexts in which a computation can be run, and the second type parameter is the return type.

Instances

#whileE Source

whileE :: forall a e. Eff e Boolean -> Eff e a -> Eff e Unit

Loop while a condition is true.

whileE b m is effectful computation which runs the effectful computation b. If its result is true, it runs the effectful computation m and loops. If not, the computation ends.

#untilE Source

untilE :: forall e. Eff e Boolean -> Eff e Unit

Loop until a condition becomes true.

untilE b is an effectful computation which repeatedly runs the effectful computation b, until its return value is true.

#runPure Source

runPure :: forall a. Pure a -> a

Run a pure computation and return its result.

#foreachE Source

foreachE :: forall a e. Array a -> (a -> Eff e Unit) -> Eff e Unit

Loop over an array of values.

foreach xs f runs the computation returned by the function f for each of the inputs xs.

#forE Source

forE :: forall e. Int -> Int -> (Int -> Eff e Unit) -> Eff e Unit

Loop over a consecutive collection of numbers.

forE lo hi f runs the computation returned by the function f for each of the inputs between lo (inclusive) and hi (exclusive).

#Effect Source

data Effect :: Type

The kind of all effect types.

Declare new effect types using foreign data declarations, as follows:

import Control.Monad.Eff (kind Effect)

foreign import data MyEffect :: Effect

Re-exports from Control.Monad.Eff.Console

#logShow Source

logShow :: forall eff a. Show a => a -> Eff (console :: CONSOLE | eff) Unit

Write a value to the console, using its Show instance to produce a String.

#log Source

log :: forall eff. String -> Eff (console :: CONSOLE | eff) Unit

Write a message to the console.

Re-exports from Control.Monad.Eff.Exception

#throw

throw :: forall a eff. String -> Eff (exception :: EXCEPTION | eff) a

A shortcut allowing you to throw an error in one step. Defined as throwException <<< error.

Re-exports from Data.Array

#uncons Source

uncons :: forall a. Array a -> Maybe { head :: a, tail :: Array a }

Break an array into its first element and remaining elements.

Using uncons provides a way of writing code that would use cons patterns in Haskell or pre-PureScript 0.7:

f (x : xs) = something
f [] = somethingElse

Becomes:

f arr = case uncons arr of
  Just { head: x, tail: xs } -> something
  Nothing -> somethingElse

#cons Source

cons :: forall a. a -> Array a -> Array a

Attaches an element to the front of an array, creating a new array.

cons 1 [2, 3, 4] = [1, 2, 3, 4]

Note, the running time of this function is O(n).

Re-exports from Data.Either

#Either Source

data Either a b

The Either type is used to represent a choice between two types of value.

A common use case for Either is error handling, where Left is used to carry an error value and Right is used to carry a success value.

Constructors

Instances

  • Functor (Either a)

    The Functor instance allows functions to transform the contents of a Right with the <$> operator:

    f <$> Right x == Right (f x)
    

    Left values are untouched:

    f <$> Left y == Left y
    
  • Invariant (Either a)
  • Bifunctor Either
  • Apply (Either e)

    The Apply instance allows functions contained within a Right to transform a value contained within a Right using the (<*>) operator:

    Right f <*> Right x == Right (f x)
    

    Left values are left untouched:

    Left f <*> Right x == Left x
    Right f <*> Left y == Left y
    

    Combining Functor's <$> with Apply's <*> can be used to transform a pure function to take Either-typed arguments so f :: a -> b -> c becomes f :: Either l a -> Either l b -> Either l c:

    f <$> Right x <*> Right y == Right (f x y)
    

    The Left-preserving behaviour of both operators means the result of an expression like the above but where any one of the values is Left means the whole result becomes Left also, taking the first Left value found:

    f <$> Left x <*> Right y == Left x
    f <$> Right x <*> Left y == Left y
    f <$> Left x <*> Left y == Left x
    
  • Applicative (Either e)

    The Applicative instance enables lifting of values into Either with the pure function:

    pure x :: Either _ _ == Right x
    

    Combining Functor's <$> with Apply's <*> and Applicative's pure can be used to pass a mixture of Either and non-Either typed values to a function that does not usually expect them, by using pure for any value that is not already Either typed:

    f <$> Right x <*> pure y == Right (f x y)
    

    Even though pure = Right it is recommended to use pure in situations like this as it allows the choice of Applicative to be changed later without having to go through and replace Right with a new constructor.

  • Alt (Either e)

    The Alt instance allows for a choice to be made between two Either values with the <|> operator, where the first Right encountered is taken.

    Right x <|> Right y == Right x
    Left x <|> Right y == Right y
    Left x <|> Left y == Left y
    
  • Bind (Either e)

    The Bind instance allows sequencing of Either values and functions that return an Either by using the >>= operator:

    Left x >>= f = Left x
    Right x >>= f = f x
    
  • Monad (Either e)

    The Monad instance guarantees that there are both Applicative and Bind instances for Either. This also enables the do syntactic sugar:

    do
      x' <- x
      y' <- y
      pure (f x' y')
    

    Which is equivalent to:

    x >>= (\x' -> y >>= (\y' -> pure (f x' y')))
    
  • Extend (Either e)

    The Extend instance allows sequencing of Either values and functions that accept an Either and return a non-Either result using the <<= operator.

    f <<= Left x = Left x
    f <<= Right x = Right (f (Right x))
    
  • (Show a, Show b) => Show (Either a b)

    The Show instance allows Either values to be rendered as a string with show whenever there is an Show instance for both type the Either can contain.

  • (Eq a, Eq b) => Eq (Either a b)
  • (Eq a) => Eq1 (Either a)
  • (Ord a, Ord b) => Ord (Either a b)
  • (Ord a) => Ord1 (Either a)
  • (Bounded a, Bounded b) => Bounded (Either a b)
  • Foldable (Either a)
  • Bifoldable Either
  • Traversable (Either a)
  • Bitraversable Either
  • (Semiring b) => Semiring (Either a b)
  • (Semigroup b) => Semigroup (Either a b)

#note Source

note :: forall b a. a -> Maybe b -> Either a b

Takes a default and a Maybe value, if the value is a Just, turn it into a Right, if the value is a Nothing use the provided default as a Left

note "default" Nothing = Left "default"
note "default" (Just 1) = Right 1

#isRight Source

isRight :: forall b a. Either a b -> Boolean

Returns true when the Either value was constructed with Right.

#isLeft Source

isLeft :: forall b a. Either a b -> Boolean

Returns true when the Either value was constructed with Left.

#hush Source

hush :: forall b a. Either a b -> Maybe b

Turns an Either into a Maybe, by throwing eventual Left values away and converting them into Nothing. Right values get turned into Justs.

hush (Left "ParseError") = Nothing
hush (Right 42) = Just 42

#fromRight Source

fromRight :: forall b a. Partial => Either a b -> b

A partial function that extracts the value from the Right data constructor. Passing a Left to fromRight will throw an error at runtime.

#fromLeft Source

fromLeft :: forall b a. Partial => Either a b -> a

A partial function that extracts the value from the Left data constructor. Passing a Right to fromLeft will throw an error at runtime.

#either Source

either :: forall c b a. (a -> c) -> (b -> c) -> Either a b -> c

Takes two functions and an Either value, if the value is a Left the inner value is applied to the first function, if the value is a Right the inner value is applied to the second function.

either f g (Left x) == f x
either f g (Right y) == g y

#choose Source

choose :: forall b a m. Alt m => m a -> m b -> m (Either a b)

Combine two alternatives.

Re-exports from Data.Foldable

#surroundMap

surroundMap :: forall m a f. Foldable f => Semigroup m => m -> (a -> m) -> f a -> m

foldMap but with each element surrounded by some fixed value.

For example:

> surroundMap "*" show []
= "*"

> surroundMap "*" show [1]
= "*1*"

> surroundMap "*" show [1, 2]
= "*1*2*"

> surroundMap "*" show [1, 2, 3]
= "*1*2*3*"

#surround

surround :: forall m f. Foldable f => Semigroup m => m -> f m -> m

fold but with each element surrounded by some fixed value.

For example:

> surround "*" []
= "*"

> surround "*" ["1"]
= "*1*"

> surround "*" ["1", "2"]
= "*1*2*"

> surround "*" ["1", "2", "3"]
= "*1*2*3*"

#oneOfMap

oneOfMap :: forall b a g f. Foldable f => Plus g => (a -> g b) -> f a -> g b

Folds a structure into some Plus.

#null

null :: forall f a. Foldable f => f a -> Boolean

Test whether the structure is empty. Optimized for structures that are similar to cons-lists, because there is no general way to do better.

#length

length :: forall f b a. Foldable f => Semiring b => f a -> b

Returns the size/length of a finite structure. Optimized for structures that are similar to cons-lists, because there is no general way to do better.

#indexr

indexr :: forall f a. Foldable f => Int -> f a -> Maybe a

Try to get nth element from the right in a data structure

#indexl

indexl :: forall f a. Foldable f => Int -> f a -> Maybe a

Try to get nth element from the left in a data structure

#foldM

foldM :: forall b a m f. Foldable f => Monad m => (a -> b -> m a) -> a -> f b -> m a

Similar to 'foldl', but the result is encapsulated in a monad.

Note: this function is not generally stack-safe, e.g., for monads which build up thunks a la Eff.

#findMap

findMap :: forall f b a. Foldable f => (a -> Maybe b) -> f a -> Maybe b

Try to find an element in a data structure which satisfies a predicate mapping.

Re-exports from Data.Map

#Map

data Map k v

Map k v represents maps from keys of type k to values of type v.

Instances

  • (Eq k) => Eq1 (Map k)
  • (Eq k, Eq v) => Eq (Map k v)
  • (Ord k) => Ord1 (Map k)
  • (Ord k, Ord v) => Ord (Map k v)
  • (Show k, Show v) => Show (Map k v)
  • (Ord k) => Semigroup (Map k v)
  • (Ord k) => Monoid (Map k v)
  • Functor (Map k)
  • FunctorWithIndex k (Map k)
  • Foldable (Map k)
  • FoldableWithIndex k (Map k)
  • Traversable (Map k)
  • TraversableWithIndex k (Map k)

Re-exports from Data.Maybe

#Maybe Source

data Maybe a

The Maybe type is used to represent optional values and can be seen as something like a type-safe null, where Nothing is null and Just x is the non-null value x.

Constructors

Instances

  • Functor Maybe

    The Functor instance allows functions to transform the contents of a Just with the <$> operator:

    f <$> Just x == Just (f x)
    

    Nothing values are left untouched:

    f <$> Nothing == Nothing
    
  • Apply Maybe

    The Apply instance allows functions contained within a Just to transform a value contained within a Just using the apply operator:

    Just f <*> Just x == Just (f x)
    

    Nothing values are left untouched:

    Just f <*> Nothing == Nothing
    Nothing <*> Just x == Nothing
    

    Combining Functor's <$> with Apply's <*> can be used transform a pure function to take Maybe-typed arguments so f :: a -> b -> c becomes f :: Maybe a -> Maybe b -> Maybe c:

    f <$> Just x <*> Just y == Just (f x y)
    

    The Nothing-preserving behaviour of both operators means the result of an expression like the above but where any one of the values is Nothing means the whole result becomes Nothing also:

    f <$> Nothing <*> Just y == Nothing
    f <$> Just x <*> Nothing == Nothing
    f <$> Nothing <*> Nothing == Nothing
    
  • Applicative Maybe

    The Applicative instance enables lifting of values into Maybe with the pure or return function (return is an alias for pure):

    pure x :: Maybe _ == Just x
    return x :: Maybe _ == Just x
    

    Combining Functor's <$> with Apply's <*> and Applicative's pure can be used to pass a mixture of Maybe and non-Maybe typed values to a function that does not usually expect them, by using pure for any value that is not already Maybe typed:

    f <$> Just x <*> pure y == Just (f x y)
    

    Even though pure = Just it is recommended to use pure in situations like this as it allows the choice of Applicative to be changed later without having to go through and replace Just with a new constructor.

  • Alt Maybe

    The Alt instance allows for a choice to be made between two Maybe values with the <|> operator, where the first Just encountered is taken.

    Just x <|> Just y == Just x
    Nothing <|> Just y == Just y
    Nothing <|> Nothing == Nothing
    
  • Plus Maybe

    The Plus instance provides a default Maybe value:

    empty :: Maybe _ == Nothing
    
  • Alternative Maybe

    The Alternative instance guarantees that there are both Applicative and Plus instances for Maybe.

  • Bind Maybe

    The Bind instance allows sequencing of Maybe values and functions that return a Maybe by using the >>= operator:

    Just x >>= f = f x
    Nothing >>= f = Nothing
    
  • Monad Maybe

    The Monad instance guarantees that there are both Applicative and Bind instances for Maybe. This also enables the do syntactic sugar:

    do
      x' <- x
      y' <- y
      pure (f x' y')
    

    Which is equivalent to:

    x >>= (\x' -> y >>= (\y' -> pure (f x' y')))
    
  • MonadZero Maybe
  • Extend Maybe

    The Extend instance allows sequencing of Maybe values and functions that accept a Maybe a and return a non-Maybe result using the <<= operator.

    f <<= Nothing = Nothing
    f <<= Just x = Just (f x)
    
  • Invariant Maybe
  • (Semigroup a) => Semigroup (Maybe a)

    The Semigroup instance enables use of the operator <> on Maybe values whenever there is a Semigroup instance for the type the Maybe contains. The exact behaviour of <> depends on the "inner" Semigroup instance, but generally captures the notion of appending or combining things.

    Just x <> Just y = Just (x <> y)
    Just x <> Nothing = Just x
    Nothing <> Just y = Just y
    Nothing <> Nothing = Nothing
    
  • (Semigroup a) => Monoid (Maybe a)
  • (Eq a) => Eq (Maybe a)
  • Eq1 Maybe
  • (Ord a) => Ord (Maybe a)
  • Ord1 Maybe
  • (Bounded a) => Bounded (Maybe a)
  • (Show a) => Show (Maybe a)

    The Show instance allows Maybe values to be rendered as a string with show whenever there is an Show instance for the type the Maybe contains.

#maybe' Source

maybe' :: forall b a. (Unit -> b) -> (a -> b) -> Maybe a -> b

Similar to maybe but for use in cases where the default value may be expensive to compute. As PureScript is not lazy, the standard maybe has to evaluate the default value before returning the result, whereas here the value is only computed when the Maybe is known to be Nothing.

maybe' (\_ -> x) f Nothing == x
maybe' (\_ -> x) f (Just y) == f y

#maybe Source

maybe :: forall b a. b -> (a -> b) -> Maybe a -> b

Takes a default value, a function, and a Maybe value. If the Maybe value is Nothing the default value is returned, otherwise the function is applied to the value inside the Just and the result is returned.

maybe x f Nothing == x
maybe x f (Just y) == f y

#isNothing Source

isNothing :: forall a. Maybe a -> Boolean

Returns true when the Maybe value is Nothing.

#isJust Source

isJust :: forall a. Maybe a -> Boolean

Returns true when the Maybe value was constructed with Just.

#fromMaybe' Source

fromMaybe' :: forall a. (Unit -> a) -> Maybe a -> a

Similar to fromMaybe but for use in cases where the default value may be expensive to compute. As PureScript is not lazy, the standard fromMaybe has to evaluate the default value before returning the result, whereas here the value is only computed when the Maybe is known to be Nothing.

fromMaybe' (\_ -> x) Nothing == x
fromMaybe' (\_ -> x) (Just y) == y

#fromMaybe Source

fromMaybe :: forall a. a -> Maybe a -> a

Takes a default value, and a Maybe value. If the Maybe value is Nothing the default value is returned, otherwise the value inside the Just is returned.

fromMaybe x Nothing == x
fromMaybe x (Just y) == y

#fromJust Source

fromJust :: forall a. Partial => Maybe a -> a

A partial function that extracts the value from the Just data constructor. Passing Nothing to fromJust will throw an error at runtime.

Re-exports from Data.SubRecord

#SubRecord

data SubRecord :: Row Type -> Type

A SubRecord x is a record which may contain values for labels in x as opposed to a Record x which must contain values for labels in x

Re-exports from Data.Symbol

#SProxy Source

data SProxy (sym :: Symbol)

A value-level proxy for a type-level symbol.

Constructors

#IsSymbol Source

class IsSymbol (sym :: Symbol)  where

A class for known symbols

Members

Instances

#reifySymbol Source

reifySymbol :: forall r. String -> (forall sym. IsSymbol sym => SProxy sym -> r) -> r

Re-exports from Data.Traversable

#Accum

type Accum s a = { accum :: s, value :: a }

#Foldable

class Foldable f  where

Foldable represents data structures which can be folded.

  • foldr folds a structure from the right
  • foldl folds a structure from the left
  • foldMap folds a structure by accumulating values in a Monoid

Default implementations are provided by the following functions:

  • foldrDefault
  • foldlDefault
  • foldMapDefaultR
  • foldMapDefaultL

Note: some combinations of the default implementations are unsafe to use together - causing a non-terminating mutually recursive cycle. These combinations are documented per function.

Members

  • foldr :: forall b a. (a -> b -> b) -> b -> f a -> b
  • foldl :: forall b a. (b -> a -> b) -> b -> f a -> b
  • foldMap :: forall m a. Monoid m => (a -> m) -> f a -> m

Instances

  • Foldable Array
  • Foldable Maybe
  • Foldable First
  • Foldable Last
  • Foldable Additive
  • Foldable Dual
  • Foldable Disj
  • Foldable Conj
  • Foldable Multiplicative

#Traversable

class (Functor t, Foldable t) <= Traversable t  where

Traversable represents data structures which can be traversed, accumulating results and effects in some Applicative functor.

  • traverse runs an action for every element in a data structure, and accumulates the results.
  • sequence runs the actions contained in a data structure, and accumulates the results.

The traverse and sequence functions should be compatible in the following sense:

  • traverse f xs = sequence (f <$> xs)
  • sequence = traverse id

Traversable instances should also be compatible with the corresponding Foldable instances, in the following sense:

  • foldMap f = runConst <<< traverse (Const <<< f)

Default implementations are provided by the following functions:

  • traverseDefault
  • sequenceDefault

Members

  • traverse :: forall m b a. Applicative m => (a -> m b) -> t a -> m (t b)
  • sequence :: forall m a. Applicative m => t (m a) -> m (t a)

Instances

  • Traversable Array
  • Traversable Maybe
  • Traversable First
  • Traversable Last
  • Traversable Additive
  • Traversable Dual
  • Traversable Conj
  • Traversable Disj
  • Traversable Multiplicative

#traverse_

traverse_ :: forall m f b a. Applicative m => Foldable f => (a -> m b) -> f a -> m Unit

Traverse a data structure, performing some effects encoded by an Applicative functor at each value, ignoring the final result.

For example:

traverse_ print [1, 2, 3]

#traverseDefault

traverseDefault :: forall m b a t. Traversable t => Applicative m => (a -> m b) -> t a -> m (t b)

A default implementation of traverse using sequence and map.

#sum

sum :: forall f a. Foldable f => Semiring a => f a -> a

Find the sum of the numeric values in a data structure.

#sequence_

sequence_ :: forall m f a. Applicative m => Foldable f => f (m a) -> m Unit

Perform all of the effects in some data structure in the order given by the Foldable instance, ignoring the final result.

For example:

sequence_ [ trace "Hello, ", trace " world!" ]

#sequenceDefault

sequenceDefault :: forall m a t. Traversable t => Applicative m => t (m a) -> m (t a)

A default implementation of sequence using traverse.

#scanr

scanr :: forall f b a. Traversable f => (a -> b -> b) -> b -> f a -> f b

Fold a data structure from the right, keeping all intermediate results instead of only the final result. Note that the initial value does not appear in the result (unlike Haskell's Prelude.scanr).

scanr (+) 0  [1,2,3] = [1,3,6]
scanr (flip (-)) 10 [1,2,3] = [4,5,7]

#scanl

scanl :: forall f b a. Traversable f => (b -> a -> b) -> b -> f a -> f b

Fold a data structure from the left, keeping all intermediate results instead of only the final result. Note that the initial value does not appear in the result (unlike Haskell's Prelude.scanl).

scanl (+) 0  [1,2,3] = [1,3,6]
scanl (-) 10 [1,2,3] = [9,7,4]

#product

product :: forall f a. Foldable f => Semiring a => f a -> a

Find the product of the numeric values in a data structure.

#or

or :: forall f a. Foldable f => HeytingAlgebra a => f a -> a

The disjunction of all the values in a data structure. When specialized to Boolean, this function will test whether any of the values in a data structure is true.

#oneOf

oneOf :: forall a g f. Foldable f => Plus g => f (g a) -> g a

Combines a collection of elements using the Alt operation.

#notElem

notElem :: forall f a. Foldable f => Eq a => a -> f a -> Boolean

Test whether a value is not an element of a data structure.

#minimumBy

minimumBy :: forall f a. Foldable f => (a -> a -> Ordering) -> f a -> Maybe a

Find the smallest element of a structure, according to a given comparison function. The comparison function should represent a total ordering (see the Ord type class laws); if it does not, the behaviour is undefined.

#minimum

minimum :: forall f a. Ord a => Foldable f => f a -> Maybe a

Find the smallest element of a structure, according to its Ord instance.

#maximumBy

maximumBy :: forall f a. Foldable f => (a -> a -> Ordering) -> f a -> Maybe a

Find the largest element of a structure, according to a given comparison function. The comparison function should represent a total ordering (see the Ord type class laws); if it does not, the behaviour is undefined.

#maximum

maximum :: forall f a. Ord a => Foldable f => f a -> Maybe a

Find the largest element of a structure, according to its Ord instance.

#mapAccumR

mapAccumR :: forall f s b a. Traversable f => (s -> a -> Accum s b) -> s -> f a -> Accum s (f b)

Fold a data structure from the right, keeping all intermediate results instead of only the final result.

Unlike scanr, mapAccumR allows the type of accumulator to differ from the element type of the final data structure.

#mapAccumL

mapAccumL :: forall f s b a. Traversable f => (s -> a -> Accum s b) -> s -> f a -> Accum s (f b)

Fold a data structure from the left, keeping all intermediate results instead of only the final result.

Unlike scanl, mapAccumL allows the type of accumulator to differ from the element type of the final data structure.

#intercalate

intercalate :: forall m f. Foldable f => Monoid m => m -> f m -> m

Fold a data structure, accumulating values in some Monoid, combining adjacent elements using the specified separator.

#for_

for_ :: forall m f b a. Applicative m => Foldable f => f a -> (a -> m b) -> m Unit

A version of traverse_ with its arguments flipped.

This can be useful when running an action written using do notation for every element in a data structure:

For example:

for_ [1, 2, 3] \n -> do
  print n
  trace "squared is"
  print (n * n)

#for

for :: forall t m b a. Applicative m => Traversable t => t a -> (a -> m b) -> m (t b)

A version of traverse with its arguments flipped.

This can be useful when running an action written using do notation for every element in a data structure:

For example:

for [1, 2, 3] \n -> do
  print n
  return (n * n)

#foldrDefault

foldrDefault :: forall b a f. Foldable f => (a -> b -> b) -> b -> f a -> b

A default implementation of foldr using foldMap.

Note: when defining a Foldable instance, this function is unsafe to use in combination with foldMapDefaultR.

#foldlDefault

foldlDefault :: forall b a f. Foldable f => (b -> a -> b) -> b -> f a -> b

A default implementation of foldl using foldMap.

Note: when defining a Foldable instance, this function is unsafe to use in combination with foldMapDefaultL.

#foldMapDefaultR

foldMapDefaultR :: forall m a f. Foldable f => Monoid m => (a -> m) -> f a -> m

A default implementation of foldMap using foldr.

Note: when defining a Foldable instance, this function is unsafe to use in combination with foldrDefault.

#foldMapDefaultL

foldMapDefaultL :: forall m a f. Foldable f => Monoid m => (a -> m) -> f a -> m

A default implementation of foldMap using foldl.

Note: when defining a Foldable instance, this function is unsafe to use in combination with foldlDefault.

#fold

fold :: forall m f. Foldable f => Monoid m => f m -> m

Fold a data structure, accumulating values in some Monoid.

#find

find :: forall f a. Foldable f => (a -> Boolean) -> f a -> Maybe a

Try to find an element in a data structure which satisfies a predicate.

#elem

elem :: forall f a. Foldable f => Eq a => a -> f a -> Boolean

Test whether a value is an element of a data structure.

#any

any :: forall f b a. Foldable f => HeytingAlgebra b => (a -> b) -> f a -> b

any f is the same as or <<< map f; map a function over the structure, and then get the disjunction of the results.

#and

and :: forall f a. Foldable f => HeytingAlgebra a => f a -> a

The conjunction of all the values in a data structure. When specialized to Boolean, this function will test whether all of the values in a data structure are true.

#all

all :: forall f b a. Foldable f => HeytingAlgebra b => (a -> b) -> f a -> b

all f is the same as and <<< map f; map a function over the structure, and then get the conjunction of the results.

Re-exports from Data.Tuple

#Tuple Source

data Tuple a b

A simple product type for wrapping a pair of component values.

Constructors

Instances

#uncurry Source

uncurry :: forall c b a. (a -> b -> c) -> Tuple a b -> c

Turn a function of two arguments into a function that expects a tuple.

#swap Source

swap :: forall b a. Tuple a b -> Tuple b a

Exchange the first and second components of a tuple.

#snd Source

snd :: forall b a. Tuple a b -> b

Returns the second component of a tuple.

#lookup Source

lookup :: forall f b a. Foldable f => Eq a => a -> f (Tuple a b) -> Maybe b

Lookup a value in a data structure of Tuples, generalizing association lists.

#fst Source

fst :: forall b a. Tuple a b -> a

Returns the first component of a tuple.

#curry Source

curry :: forall c b a. (Tuple a b -> c) -> a -> b -> c

Turn a function that expects a tuple into a function of two arguments.

Re-exports from Prelude

#Void

newtype Void

An uninhabited data type.

Void is useful to eliminate the possibility of a value being created. For example, a value of type Either Void Boolean can never have a Left value created in PureScript.

Instances

  • Show Void

#Unit

data Unit :: Type

The Unit type has a single inhabitant, called unit. It represents values with no computational content.

Unit is often used, wrapped in a monadic type constructor, as the return type of a computation where only the effects are important.

Instances

  • Show Unit

#Ordering

data Ordering

The Ordering data type represents the three possible outcomes of comparing two values:

LT - The first value is less than the second. GT - The first value is greater than the second. EQ - The first value is equal to the second.

Constructors

  • LT
  • GT
  • EQ

Instances

  • Eq Ordering
  • Semigroup Ordering
  • Show Ordering

#Applicative

class (Apply f) <= Applicative f  where

The Applicative type class extends the Apply type class with a pure function, which can be used to create values of type f a from values of type a.

Where Apply provides the ability to lift functions of two or more arguments to functions whose arguments are wrapped using f, and Functor provides the ability to lift functions of one argument, pure can be seen as the function which lifts functions of zero arguments. That is, Applicative functors support a lifting operation for any number of function arguments.

Instances must satisfy the following laws in addition to the Apply laws:

  • Identity: (pure id) <*> v = v
  • Composition: pure (<<<) <*> f <*> g <*> h = f <*> (g <*> h)
  • Homomorphism: (pure f) <*> (pure x) = pure (f x)
  • Interchange: u <*> (pure y) = (pure (_ $ y)) <*> u

Members

  • pure :: forall a. a -> f a

Instances

  • Applicative (Function r)
  • Applicative Array

#Apply

class (Functor f) <= Apply f  where

The Apply class provides the (<*>) which is used to apply a function to an argument under a type constructor.

Apply can be used to lift functions of two or more arguments to work on values wrapped with the type constructor f. It might also be understood in terms of the lift2 function:

lift2 :: forall f a b c. Apply f => (a -> b -> c) -> f a -> f b -> f c
lift2 f a b = f <$> a <*> b

(<*>) is recovered from lift2 as lift2 ($). That is, (<*>) lifts the function application operator ($) to arguments wrapped with the type constructor f.

Instances must satisfy the following law in addition to the Functor laws:

  • Associative composition: (<<<) <$> f <*> g <*> h = f <*> (g <*> h)

Formally, Apply represents a strong lax semi-monoidal endofunctor.

Members

  • apply :: forall b a. f (a -> b) -> f a -> f b

Instances

  • Apply (Function r)
  • Apply Array

#Bind

class (Apply m) <= Bind m  where

The Bind type class extends the Apply type class with a "bind" operation (>>=) which composes computations in sequence, using the return value of one computation to determine the next computation.

The >>= operator can also be expressed using do notation, as follows:

x >>= f = do y <- x
             f y

where the function argument of f is given the name y.

Instances must satisfy the following law in addition to the Apply laws:

  • Associativity: (x >>= f) >>= g = x >>= (\k -> f k >>= g)

Associativity tells us that we can regroup operations which use do notation so that we can unambiguously write, for example:

do x <- m1
   y <- m2 x
   m3 x y

Members

  • bind :: forall b a. m a -> (a -> m b) -> m b

Instances

  • Bind (Function r)
  • Bind Array

#BooleanAlgebra

class (HeytingAlgebra a) <= BooleanAlgebra a 

The BooleanAlgebra type class represents types that behave like boolean values.

Instances should satisfy the following laws in addition to the HeytingAlgebra law:

  • Excluded middle:
    • a || not a = tt

Instances

  • BooleanAlgebra Boolean
  • BooleanAlgebra Unit
  • (BooleanAlgebra b) => BooleanAlgebra (a -> b)

#Bounded

class (Ord a) <= Bounded a  where

The Bounded type class represents totally ordered types that have an upper and lower boundary.

Instances should satisfy the following law in addition to the Ord laws:

  • Bounded: bottom <= a <= top

Members

  • top :: a
  • bottom :: a

Instances

  • Bounded Boolean
  • Bounded Int
  • Bounded Char

    Characters fall within the Unicode range.

  • Bounded Ordering
  • Bounded Unit

#Category

class (Semigroupoid a) <= Category a  where

Categorys consist of objects and composable morphisms between them, and as such are Semigroupoids, but unlike semigroupoids must have an identity element.

Instances must satisfy the following law in addition to the Semigroupoid law:

  • Identity: id <<< p = p <<< id = p

Members

  • id :: forall t. a t t

Instances

  • Category Function

#CommutativeRing

class (Ring a) <= CommutativeRing a 

The CommutativeRing class is for rings where multiplication is commutative.

Instances must satisfy the following law in addition to the Ring laws:

  • Commutative multiplication: a * b = b * a

Instances

  • CommutativeRing Int
  • CommutativeRing Number
  • CommutativeRing Unit
  • (CommutativeRing b) => CommutativeRing (a -> b)

#Discard

class Discard a  where

A class for types whose values can safely be discarded in a do notation block.

An example is the Unit type, since there is only one possible value which can be returned.

Members

  • discard :: forall b f. Bind f => f a -> (a -> f b) -> f b

Instances

  • Discard Unit

#DivisionRing

class (Ring a) <= DivisionRing a  where

The DivisionRing class is for non-zero rings in which every non-zero element has a multiplicative inverse. Division rings are sometimes also called skew fields.

Instances must satisfy the following laws in addition to the Ring laws:

  • Non-zero ring: one /= zero
  • Non-zero multiplicative inverse: recip a * a = a * recip a = one for all non-zero a

The result of recip zero is left undefined; individual instances may choose how to handle this case.

If a type has both DivisionRing and CommutativeRing instances, then it is a field and should have a Field instance.

Members

  • recip :: a -> a

Instances

  • DivisionRing Number

#Eq

class Eq a  where

The Eq type class represents types which support decidable equality.

Eq instances should satisfy the following laws:

  • Reflexivity: x == x = true
  • Symmetry: x == y = y == x
  • Transitivity: if x == y and y == z then x == z

Note: The Number type is not an entirely law abiding member of this class due to the presence of NaN, since NaN /= NaN. Additionally, computing with Number can result in a loss of precision, so sometimes values that should be equivalent are not.

Members

  • eq :: a -> a -> Boolean

Instances

  • Eq Boolean
  • Eq Int
  • Eq Number
  • Eq Char
  • Eq String
  • Eq Unit
  • Eq Void
  • (Eq a) => Eq (Array a)

#EuclideanRing

class (CommutativeRing a) <= EuclideanRing a  where

The EuclideanRing class is for commutative rings that support division. The mathematical structure this class is based on is sometimes also called a Euclidean domain.

Instances must satisfy the following laws in addition to the Ring laws:

  • Integral domain: one /= zero, and if a and b are both nonzero then so is their product a * b
  • Euclidean function degree:
    • Nonnegativity: For all nonzero a, degree a >= 0
    • Quotient/remainder: For all a and b, where b is nonzero, let q = a / b and r = a `mod` b; then a = q*b + r, and also either r = zero or degree r < degree b
  • Submultiplicative euclidean function:
    • For all nonzero a and b, degree a <= degree (a * b)

The behaviour of division by zero is unconstrained by these laws, meaning that individual instances are free to choose how to behave in this case. Similarly, there are no restrictions on what the result of degree zero is; it doesn't make sense to ask for degree zero in the same way that it doesn't make sense to divide by zero, so again, individual instances may choose how to handle this case.

For any EuclideanRing which is also a Field, one valid choice for degree is simply const 1. In fact, unless there's a specific reason not to, Field types should normally use this definition of degree.

Members

  • degree :: a -> Int
  • div :: a -> a -> a
  • mod :: a -> a -> a

Instances

  • EuclideanRing Int
  • EuclideanRing Number

#Field

class (EuclideanRing a) <= Field a 

The Field class is for types that are (commutative) fields.

Instances must satisfy the following law in addition to the EuclideanRing laws:

  • Non-zero multiplicative inverse: a `mod` b = zero for all a and b

If a type has a Field instance, it should also have a DivisionRing instance. In a future release, DivisionRing may become a superclass of Field.

Instances

  • Field Number

#Functor

class Functor f  where

A Functor is a type constructor which supports a mapping operation map.

map can be used to turn functions a -> b into functions f a -> f b whose argument and return types use the type constructor f to represent some computational context.

Instances must satisfy the following laws:

  • Identity: map id = id
  • Composition: map (f <<< g) = map f <<< map g

Members

  • map :: forall b a. (a -> b) -> f a -> f b

Instances

  • Functor (Function r)
  • Functor Array

#HeytingAlgebra

class HeytingAlgebra a  where

The HeytingAlgebra type class represents types that are bounded lattices with an implication operator such that the following laws hold:

  • Associativity:
    • a || (b || c) = (a || b) || c
    • a && (b && c) = (a && b) && c
  • Commutativity:
    • a || b = b || a
    • a && b = b && a
  • Absorption:
    • a || (a && b) = a
    • a && (a || b) = a
  • Idempotent:
    • a || a = a
    • a && a = a
  • Identity:
    • a || ff = a
    • a && tt = a
  • Implication:
    • a `implies` a = tt
    • a && (a `implies` b) = a && b
    • b && (a `implies` b) = b
    • a `implies` (b && c) = (a `implies` b) && (a `implies` c)
  • Complemented:
    • not a = a `implies` ff

Members

  • conj :: a -> a -> a
  • disj :: a -> a -> a
  • not :: a -> a

Instances

  • HeytingAlgebra Boolean
  • HeytingAlgebra Unit
  • (HeytingAlgebra b) => HeytingAlgebra (a -> b)

#Monad

class (Applicative m, Bind m) <= Monad m 

The Monad type class combines the operations of the Bind and Applicative type classes. Therefore, Monad instances represent type constructors which support sequential composition, and also lifting of functions of arbitrary arity.

Instances must satisfy the following laws in addition to the Applicative and Bind laws:

  • Left Identity: pure x >>= f = f x
  • Right Identity: x >>= pure = x

Instances

  • Monad (Function r)
  • Monad Array

#Ord

class (Eq a) <= Ord a  where

The Ord type class represents types which support comparisons with a total order.

Ord instances should satisfy the laws of total orderings:

  • Reflexivity: a <= a
  • Antisymmetry: if a <= b and b <= a then a = b
  • Transitivity: if a <= b and b <= c then a <= c

Members

  • compare :: a -> a -> Ordering

Instances

  • Ord Boolean
  • Ord Int
  • Ord Number
  • Ord String
  • Ord Char
  • Ord Unit
  • Ord Void
  • (Ord a) => Ord (Array a)
  • Ord Ordering

#Ring

class (Semiring a) <= Ring a  where

The Ring class is for types that support addition, multiplication, and subtraction operations.

Instances must satisfy the following law in addition to the Semiring laws:

  • Additive inverse: a - a = (zero - a) + a = zero

Members

  • sub :: a -> a -> a

Instances

  • Ring Int
  • Ring Number
  • Ring Unit
  • (Ring b) => Ring (a -> b)

#Semigroup

class Semigroup a  where

The Semigroup type class identifies an associative operation on a type.

Instances are required to satisfy the following law:

  • Associativity: (x <> y) <> z = x <> (y <> z)

One example of a Semigroup is String, with (<>) defined as string concatenation.

Members

  • append :: a -> a -> a

Instances

  • Semigroup String
  • Semigroup Unit
  • Semigroup Void
  • (Semigroup s') => Semigroup (s -> s')
  • Semigroup (Array a)

#Semigroupoid

class Semigroupoid a  where

A Semigroupoid is similar to a Category but does not require an identity element id, just composable morphisms.

Semigroupoids must satisfy the following law:

  • Associativity: p <<< (q <<< r) = (p <<< q) <<< r

One example of a Semigroupoid is the function type constructor (->), with (<<<) defined as function composition.

Members

  • compose :: forall d c b. a c d -> a b c -> a b d

Instances

  • Semigroupoid Function

#Semiring

class Semiring a  where

The Semiring class is for types that support an addition and multiplication operation.

Instances must satisfy the following laws:

  • Commutative monoid under addition:
    • Associativity: (a + b) + c = a + (b + c)
    • Identity: zero + a = a + zero = a
    • Commutative: a + b = b + a
  • Monoid under multiplication:
    • Associativity: (a * b) * c = a * (b * c)
    • Identity: one * a = a * one = a
  • Multiplication distributes over addition:
    • Left distributivity: a * (b + c) = (a * b) + (a * c)
    • Right distributivity: (a + b) * c = (a * c) + (b * c)
  • Annihilation: zero * a = a * zero = zero

Note: The Number and Int types are not fully law abiding members of this class hierarchy due to the potential for arithmetic overflows, and in the case of Number, the presence of NaN and Infinity values. The behaviour is unspecified in these cases.

Members

  • add :: a -> a -> a
  • zero :: a
  • mul :: a -> a -> a
  • one :: a

Instances

  • Semiring Int
  • Semiring Number
  • (Semiring b) => Semiring (a -> b)
  • Semiring Unit

#Show

class Show a  where

The Show type class represents those types which can be converted into a human-readable String representation.

While not required, it is recommended that for any expression x, the string show x be executable PureScript code which evaluates to the same value as the expression x.

Members

  • show :: a -> String

Instances

  • Show Boolean
  • Show Int
  • Show Number
  • Show Char
  • Show String
  • (Show a) => Show (Array a)

#whenM

whenM :: forall m. Monad m => m Boolean -> m Unit -> m Unit

Perform a monadic action when a condition is true, where the conditional value is also in a monadic context.

#when

when :: forall m. Applicative m => Boolean -> m Unit -> m Unit

Perform an applicative action when a condition is true.

#void

void :: forall a f. Functor f => f a -> f Unit

The void function is used to ignore the type wrapped by a Functor, replacing it with Unit and keeping only the type information provided by the type constructor itself.

void is often useful when using do notation to change the return type of a monadic computation:

main = forE 1 10 \n -> void do
  print n
  print (n * n)

#unlessM

unlessM :: forall m. Monad m => m Boolean -> m Unit -> m Unit

Perform a monadic action unless a condition is true, where the conditional value is also in a monadic context.

#unless

unless :: forall m. Applicative m => Boolean -> m Unit -> m Unit

Perform an applicative action unless a condition is true.

#unit

unit :: Unit

unit is the sole inhabitant of the Unit type.

#otherwise

otherwise :: Boolean

An alias for true, which can be useful in guard clauses:

max x y | x >= y    = x
        | otherwise = y

#notEq

notEq :: forall a. Eq a => a -> a -> Boolean

notEq tests whether one value is not equal to another. Shorthand for not (eq x y).

#negate

negate :: forall a. Ring a => a -> a

negate x can be used as a shorthand for zero - x.

#min

min :: forall a. Ord a => a -> a -> a

Take the minimum of two values. If they are considered equal, the first argument is chosen.

#max

max :: forall a. Ord a => a -> a -> a

Take the maximum of two values. If they are considered equal, the first argument is chosen.

#liftM1

liftM1 :: forall b a m. Monad m => (a -> b) -> m a -> m b

liftM1 provides a default implementation of (<$>) for any Monad, without using (<$>) as provided by the Functor-Monad superclass relationship.

liftM1 can therefore be used to write Functor instances as follows:

instance functorF :: Functor F where
  map = liftM1

#liftA1

liftA1 :: forall b a f. Applicative f => (a -> b) -> f a -> f b

liftA1 provides a default implementation of (<$>) for any Applicative functor, without using (<$>) as provided by the Functor-Applicative superclass relationship.

liftA1 can therefore be used to write Functor instances as follows:

instance functorF :: Functor F where
  map = liftA1

#lcm

lcm :: forall a. Eq a => EuclideanRing a => a -> a -> a

The least common multiple of two values.

#join

join :: forall m a. Bind m => m (m a) -> m a

Collapse two applications of a monadic type constructor into one.

#ifM

ifM :: forall m a. Bind m => m Boolean -> m a -> m a -> m a

Execute a monadic action if a condition holds.

For example:

main = ifM ((< 0.5) <$> random)
         (trace "Heads")
         (trace "Tails")

#gcd

gcd :: forall a. Eq a => EuclideanRing a => a -> a -> a

The greatest common divisor of two values.

#flip

flip :: forall c b a. (a -> b -> c) -> b -> a -> c

Flips the order of the arguments to a function of two arguments.

flip const 1 2 = const 2 1 = 2

#flap

flap :: forall b a f. Functor f => f (a -> b) -> a -> f b

Apply a value in a computational context to a value in no context.

Generalizes flip.

longEnough :: String -> Bool
hasSymbol :: String -> Bool
hasDigit :: String -> Bool
password :: String

validate :: String -> List Bool
validate = flap [longEnough, hasSymbol, hasDigit]
flap (-) 3 4 == 1
threeve <$> Just 1 <@> 'a' <*> Just true == Just (threeve 1 'a' true)

#const

const :: forall b a. a -> b -> a

Returns its first argument and ignores its second.

const 1 "hello" = 1

#comparing

comparing :: forall b a. Ord b => (a -> b) -> (a -> a -> Ordering)

Compares two values by mapping them to a type with an Ord instance.

#clamp

clamp :: forall a. Ord a => a -> a -> a -> a

Clamp a value between a minimum and a maximum. For example:

let f = clamp 0 10
f (-5) == 0
f 5    == 5
f 15   == 10

#between

between :: forall a. Ord a => a -> a -> a -> Boolean

Test whether a value is between a minimum and a maximum (inclusive). For example:

let f = between 0 10
f 0    == true
f (-5) == false
f 5    == true
f 10   == true
f 15   == false

#ap

ap :: forall b a m. Monad m => m (a -> b) -> m a -> m b

ap provides a default implementation of (<*>) for any Monad, without using (<*>) as provided by the Apply-Monad superclass relationship.

ap can therefore be used to write Apply instances as follows:

instance applyF :: Apply F where
  apply = ap

#absurd

absurd :: forall a. Void -> a

#(||)

Operator alias for Data.HeytingAlgebra.disj (right-associative / precedence 2)

#(>>>)

Operator alias for Control.Semigroupoid.composeFlipped (right-associative / precedence 9)

#(>>=)

Operator alias for Control.Bind.bind (left-associative / precedence 1)

#(>=>)

Operator alias for Control.Bind.composeKleisli (right-associative / precedence 1)

#(>=)

Operator alias for Data.Ord.greaterThanOrEq (left-associative / precedence 4)

#(>)

Operator alias for Data.Ord.greaterThan (left-associative / precedence 4)

#(==)

Operator alias for Data.Eq.eq (non-associative / precedence 4)

#(=<<)

Operator alias for Control.Bind.bindFlipped (right-associative / precedence 1)

#(<@>)

Operator alias for Data.Functor.flap (left-associative / precedence 4)

#(<>)

Operator alias for Data.Semigroup.append (right-associative / precedence 5)

#(<=<)

Operator alias for Control.Bind.composeKleisliFlipped (right-associative / precedence 1)

#(<=)

Operator alias for Data.Ord.lessThanOrEq (left-associative / precedence 4)

#(<<<)

Operator alias for Control.Semigroupoid.compose (right-associative / precedence 9)

#(<*>)

Operator alias for Control.Apply.apply (left-associative / precedence 4)

#(<*)

Operator alias for Control.Apply.applyFirst (left-associative / precedence 4)

#(<$>)

Operator alias for Data.Functor.map (left-associative / precedence 4)

#(<$)

Operator alias for Data.Functor.voidRight (left-associative / precedence 4)

#(<#>)

Operator alias for Data.Functor.mapFlipped (left-associative / precedence 1)

#(<)

Operator alias for Data.Ord.lessThan (left-associative / precedence 4)

#(/=)

Operator alias for Data.Eq.notEq (non-associative / precedence 4)

#(/)

Operator alias for Data.EuclideanRing.div (left-associative / precedence 7)

#(-)

Operator alias for Data.Ring.sub (left-associative / precedence 6)

#(+)

Operator alias for Data.Semiring.add (left-associative / precedence 6)

#(*>)

Operator alias for Control.Apply.applySecond (left-associative / precedence 4)

#(*)

Operator alias for Data.Semiring.mul (left-associative / precedence 7)

#(&&)

Operator alias for Data.HeytingAlgebra.conj (right-associative / precedence 3)

#($>)

Operator alias for Data.Functor.voidLeft (left-associative / precedence 4)

#($)

Operator alias for Data.Function.apply (right-associative / precedence 0)

Applies a function to an argument: the reverse of (#).

length $ groupBy productCategory $ filter isInStock $ products

is equivalent to:

length (groupBy productCategory (filter isInStock products))

Or another alternative equivalent, applying chain of composed functions to a value:

length <<< groupBy productCategory <<< filter isInStock $ products

#(#)

Operator alias for Data.Function.applyFlipped (left-associative / precedence 1)

Applies an argument to a function: the reverse of ($).

products # filter isInStock # groupBy productCategory # length

is equivalent to:

length (groupBy productCategory (filter isInStock products))

Or another alternative equivalent, applying a value to a chain of composed functions:

products # filter isInStock >>> groupBy productCategory >>> length

#type (~>)

Operator alias for Data.NaturalTransformation.NaturalTransformation (right-associative / precedence 4)