cat/instances/applicative

Applicative instances: Option, List, Reader, Writer.

Values

pub fn list_applicative(
  ,
) -> applicative.Applicative(
  types.ListF,
  a,
  b,
  List(a),
  List(b),
  List(fn(a) -> b),
)

Instance for Applicative List.

instance Applicative [] where
    // pure :: a -> [a]
    pure x = [x]
    // (<*>) :: [a -> b] -> [a] -> [b]
    fs <*> xs = [f x | f <- fs, x <- xs]

Examples

[1, 2, 3]
|> {
    [fn(x) { x * 2 }, fn(x) { x + 10 }]
    |> apply(list_applicative())
}
// -> [2, 4, 6, 11, 12, 13]
pub fn option_applicative(
  ,
) -> applicative.Applicative(
  types.OptionF,
  a,
  b,
  option.Option(a),
  option.Option(b),
  option.Option(fn(a) -> b),
)

Instance for Applicative Option.

instance Applicative Maybe where
    // pure :: a -> Maybe a
    pure x = Just x
    // (<*>) :: Maybe (a -> b) -> Maybe a -> Maybe b 
    Nothing <*> _ = Nothing
    Just(f) <*> m = fmap f m

Examples

9
|> { option_applicative() |> pure() }
// -> Some(9)
let option_f =
    int.to_string
    |> { option_applicative() |> pure() }
    |> { option_applicative() |> apply() }
None 
|> option_f()
// -> None
Some(12) 
|> option_f()
// -> Some("12")
pub fn reader_applicative(
  ,
) -> applicative.Applicative(
  types.ReaderF(r),
  a,
  b,
  cat.Reader(r, a),
  cat.Reader(r, b),
  cat.Reader(r, fn(a) -> b),
)

Applicative instance for Reader.

pub fn writer_applicative(
  ,
) -> applicative.Applicative(
  types.WriterF,
  a,
  b,
  cat.Writer(a),
  cat.Writer(b),
  cat.Writer(fn(a) -> b),
)

Applicative instance for Writer.

Search Document