cat/instances/functor

Functor instances: Option, List, Reader, Writer, Const, Tuple, Triple, Pair, Either.

Values

pub fn const_functor(
  ,
) -> functor.Functor(
  types.ConstF(c),
  a,
  b,
  cat.Const(c, a),
  cat.Const(c, b),
)

Const Functor Instance.

// Haskell instance
instance Functor (Const c) where
    fmap :: (a -> b) -> Const c a -> Const c b
    fmap _ (Const v) = Const v  

Examples

const_functor().fmap(int.to_string)(Const(True))
// -> Const(True)
pub fn either_functor(
  ,
) -> functor.Functor(
  types.EitherF(e),
  a,
  b,
  cat.Either(e, a),
  cat.Either(e, b),
)

Either Functor.

Examples

either_functor().fmap(bool.negate)(Left(27))
// -> Left(27)
either_functor().fmap(bool.negate)(Right(False))
// -> Right(True)
pub fn function_functor(
  ,
) -> functor.Functor(
  types.FunctionF(r),
  a,
  b,
  fn(r) -> a,
  fn(r) -> b,
)

(->) Functor Instance.

// Haskell instance
instance Functor ((->) r) where
    fmap :: (a -> b) -> (r -> a) -> (r -> b)
    fmap f g = f ∘ g

Examples

let f = fn(x) { x % 2 == 0 }
let g = bool.to_string

function_functor().fmap(g)(f)(19)
// -> "False"
pub fn identity_functor(
  ,
) -> functor.Functor(
  types.IdentityF,
  a,
  b,
  cat.Identity(a),
  cat.Identity(b),
)

Identity Functor Instance.

// Haskell implementation
instance Functor Maybe where
    fmap :: (a -> b) -> Identity a -> Identity b
    fmap f (Identity x) = Identity(f x)

Examples

let f = fn(x: Int) -> Bool { x % 2 == 0 }
identity_functor().fmap(f)(Identity(5))
// -> Identity(False)
pub fn list_functor(
  ,
) -> functor.Functor(types.ListF, a, b, List(a), List(b))

List Functor Instance.

// Haskell instance
instance Functor [] where
    fmap :: (a -> b) -> [a] -> [b]
    fmap _ [] = []
    fmap f (x:xs) = (f x):(fmap f xs)

Examples

list_functor().fmap(int.to_string)([1, 3, 4])
// -> ["1", "3", "4"]
pub fn option_functor(
  ,
) -> functor.Functor(
  types.OptionF,
  a,
  b,
  option.Option(a),
  option.Option(b),
)

Option Functor Instance (generic over a and b).

// Haskell instance
instance Functor Maybe where
    fmap :: (a -> b) -> Maybe a -> Maybe b
    fmap _ Nothing = Nothing
    fmap f (Just x) = Just (f x)

Examples

let double = fn(x) { x * 2 }
option_functor().fmap(double)(None)
// -> None
Some(2)
|> option_functor().fmap(double)
// -> Some(4)
pub fn pair_functor(
  ,
) -> functor.Functor(
  types.PairF(c),
  a,
  b,
  cat.Pair(c, a),
  cat.Pair(c, b),
)

Pair Functor.

Examples

pair_functor().fmap(bool.negate)(Pair(9, False))
// -> Pair(9, True)
pub fn reader_functor(
  ,
) -> functor.Functor(
  types.ReaderF(r),
  a,
  b,
  cat.Reader(r, a),
  cat.Reader(r, b),
)

Reader Functor Instance.

// Haskell implementation
instance Functor (Reader r) where
  fmap :: (a -> b) -> Reader r a -> Reader r b
  fmap f g = f ∘ g

Examples

let ra = Reader(fn(x) { x % 2 == 0 })
let f = bool.to_string

reader_functor().fmap(f)(ra).apply(19)
// -> "False"
pub fn result_functor(
  ,
) -> functor.Functor(
  types.ResultF(e),
  a,
  b,
  Result(a, e),
  Result(b, e),
)

Result Functor Instance.

Examples

result_functor().fmap(int.to_string)(Ok(72))
// -> Ok("72")
result_functor().fmap(int.to_string)(Error("Not a number"))
// -> Error("Not a number")
pub fn triple_functor(
  ,
) -> functor.Functor(
  types.TripleF(c, d),
  a,
  b,
  #(c, d, a),
  #(c, d, b),
)

Triple Functor.

Examples

triple_functor().fmap(bool.negate)(#("abc", 9, False))
// -> #("abc", 9, True)
pub fn tuple_functor(
  ,
) -> functor.Functor(types.TupleF(c), a, b, #(c, a), #(c, b))

Tuple Functor.

Examples

tuple_functor().fmap(bool.negate)(#(9, False))
// -> #(9, True)
pub fn writer_functor(
  ,
) -> functor.Functor(
  types.WriterF,
  a,
  b,
  cat.Writer(a),
  cat.Writer(b),
)

Writer Functor Instance.

// Haskell Instance
fmap :: (a -> b) -> Writer a -> Writer b
fmap f = id >=> (\x -> return (f x))

Examples

monad.Writer(16, "message")
|> writer_functor().fmap(fn(x) { x % 4 == 0 })
// -> monad.Writer(True, "message")
Search Document