Options
All
  • Public
  • Public/Protected
  • All
Menu

Module maybe

Index

Type aliases

CaseOf

CaseOf<T, U>: { Just: (value: T) => U; Nothing: () => U }

Type of caseOf method.

Just must be function what takes value from Maybe if the Maybe is Just(some) and return some value.

Nothing must be function what return some value if the Maybe is Nothing().

Type parameters

  • T

  • U

Type declaration

  • Just: (value: T) => U
      • (value: T): U
      • Parameters

        • value: T

        Returns U

  • Nothing: () => U
      • (): U
      • Returns U

Shape

Shape<T>: Maybe<T>

Type parameters

  • T

Functions

apply

  • apply<T, U>(applicative: Maybe<U>, maybe: Maybe<T>): ApplicativeResult<T, U>
  • apply<T, U>(applicative: Maybe<U>): (maybe: Maybe<T>) => ApplicativeResult<T, U>
  • Method like Maybe.apply but to get maybe and call method apply with a function.

    import { Maybe } from 'monad-maniac'
    
    const foo = Maybe.of(12)
    const appliedFoo = Maybe.apply(Maybe.of((x) => x * x), foo) // Just(144)
    

    Type parameters

    • T

    • U: (value: T) => any

    Parameters

    Returns ApplicativeResult<T, U>

  • Just curried apply.

    Maybe(a -> b) -> Maybe(a) -> Maybe(b)

    Type parameters

    • T

    • U: (value: T) => any

    Parameters

    Returns (maybe: Maybe<T>) => ApplicativeResult<T, U>

      • (maybe: Maybe<T>): ApplicativeResult<T, U>
      • Parameters

        Returns ApplicativeResult<T, U>

caseOf

  • caseOf<T, U>(matcher: CaseOf<T, U>, maybe: Maybe<T>): U
  • caseOf<T, U>(matcher: CaseOf<T, U>): (maybe: Maybe<T>) => U
  • Method like Maybe.caseOf but to get maybe and call method caseOf with a function.

    import { Maybe } from 'monad-maniac'
    
    const brokenDataMaybe = Maybe.of<number>(null)
    const normalDataMaybe = Maybe.of(10)
    
    const matcher: Maybe.CaseOf<number> = {
     Just: (x) => x * x,
     Nothing: () => -1,
    }
    
    const unwrappedNormal = Maybe.caseOf(matcher, brokenDataMaybe) // 100
    const unwrappedBroken = Maybe.caseOf(matcher, normalDataMaybe) // -1
    
    // More example:
    
    brokenDataMaybe.caseOf({
     Just: (x) => Maybe.of(x * x),
     Nothing: () => Maybe.of(-1),
    }).map((x) => x ^ 2) // Just(1)
    
    unwrappedNormal.caseOf({
     Just: (x) => Maybe.of(x * x),
     Nothing: () => Maybe.of(-1),
    }).map((x) => x ^ 2) // Nothing
    

    Type parameters

    • T

    • U

    Parameters

    • matcher: CaseOf<T, U>

      This is object with two fields Just and Nothing what contains functions.

    • maybe: Maybe<T>

    Returns U

  • Just curried caseOf.

    CaseOf a b -> Maybe(a) -> b

    Type parameters

    • T

    • U

    Parameters

    Returns (maybe: Maybe<T>) => U

      • Parameters

        Returns U

chain

  • Method like Maybe.chain but to get maybe and call method chain with a function.

    import { Maybe } from 'monad-maniac'
    
    const foo = Maybe.of(12)
    const resultFoo = Maybe.chain((x) => x * x, foo) // 144
    

    Type parameters

    • T

    • U

    Parameters

    • f: (value: T) => Maybe<U>
        • Parameters

          • value: T

          Returns Maybe<U>

    • maybe: Maybe<T>

    Returns Maybe<U>

  • Just curried chain.

    (a -> b) -> Maybe(a) -> b

    Type parameters

    • T

    • U

    Parameters

    • f: (value: T) => Maybe<U>
        • Parameters

          • value: T

          Returns Maybe<U>

    Returns (maybe: Maybe<T>) => Maybe<U>

equals

  • equals<T>(maybeA: Maybe<T>, maybeB: Maybe<T>): boolean
  • equals<T>(maybeA: Maybe<T>): (maybeB: Maybe<T>) => boolean
  • Method like Maybe.equals but to get maybe and call method equals with a function.

    import { Maybe } from 'monad-maniac'
    
    const firstDataMaybe = Maybe.of(10)
    const secondDataMaybe = Maybe.of(10)
    
    const isEqual = Maybe.equals(firstDataMaybe, secondDataMaybe) // true
    

    Type parameters

    • T

    Parameters

    Returns boolean

  • Just curried equals.

    Maybe(a) -> Maybe(a) -> boolean

    Type parameters

    • T

    Parameters

    Returns (maybeB: Maybe<T>) => boolean

      • (maybeB: Maybe<T>): boolean
      • Parameters

        Returns boolean

equalsValue

  • equalsValue<T>(value: T, maybe: Maybe<T>): boolean
  • equalsValue<T>(value: T): (maybe: Maybe<T>) => boolean
  • Method like Maybe.equalsValue but to get maybe and call method equalsValue with a function.

    import { Maybe } from 'monad-maniac'
    
    const just = Maybe.of(10)
    
    const isEqual = Maybe.equalsValue(10, just) // true
    

    Type parameters

    • T

    Parameters

    • value: T
    • maybe: Maybe<T>

    Returns boolean

  • Just curried equalsValue.

    a -> Maybe(a) -> boolean

    Type parameters

    • T

    Parameters

    • value: T

    Returns (maybe: Maybe<T>) => boolean

      • (maybe: Maybe<T>): boolean
      • Parameters

        Returns boolean

getOrElse

  • getOrElse<T, U>(defaultValue: U, maybe: Maybe<T>): T | U
  • getOrElse<T, U>(defaultValue: U): (maybe: Maybe<T>) => T | U
  • Unwrap Maybe with default value. Method like Maybe.getOrElse but to get maybe and call method getOrElse with a function.

    import { Maybe } from 'monad-maniac'
    
    const just = Maybe.of(10)
    const nothing = Maybe.of<number>(null)
    
    const normal = Maybe.getOrElse(-1, just) // 10
    const bad = Maybe.getOrElse(-1, nothing) // -1
    

    Type parameters

    • T

    • U

    Parameters

    • defaultValue: U
    • maybe: Maybe<T>

    Returns T | U

  • Just curried getOrElse.

    (a -> b) -> Maybe(a) -> Maybe(b)

    Type parameters

    • T

    • U

    Parameters

    • defaultValue: U

    Returns (maybe: Maybe<T>) => T | U

      • (maybe: Maybe<T>): T | U
      • Parameters

        Returns T | U

join

  • join<T>(value: Maybe<T>): JoinMaybe<T>
  • Unwrap Maybe from Maybe, if in Maybe will not Maybe then returns Nothing.

    Maybe(Maybe a) -> Maybe a

    Method like Maybe.join

    import { Maybe } from 'monad-maniac'
    
    const just = Maybe.of(10)
    const nestedJust = Maybe.of(just) // Just(Just(10))
    
    const backJust = Maybe.join(nestedJust) // Just(10)
    const backMoreJust = Maybe.join(backJust) // Nothing
    

    Type parameters

    • T

    Parameters

    Returns JoinMaybe<T>

lift

  • lift<T, U>(f: (value: T) => Nullable<U>, value: Nullable<T>): Maybe<NonNullable<U>>
  • lift<T, U>(f: (value: T) => Nullable<U>): (value: Nullable<T>) => Maybe<NonNullable<U>>
  • Lift function - contain function in wrapper for returning Maybe. If function will return null or undefined, you get Nothing, else Just(some).

    import { Maybe } from 'monad-maniac'
    
    const  find = <T>(list: T[]) => (predicate: (v: T) => boolean) => list.find(predicate)
    
    type DataItem = {
      id: number
      name: string
    }
    
    const data: DataItem[] = [{ id: 1, name: 'Jayson' }, { id: 2, name: 'Michael' }]
    const safeFindInList = Maybe.lift(find(data))
    
    const resultJust = safeFindInList(({ id }) => id === 1) // Just([object Object])
    const resultNothing = safeFindInList(({ id }) => id === 10) // Nothing()
    
    const matcher: Maybe.CaseOf<DataItem, string> = {
     Just: ({ name }) => name,
     Nothing: () => 'UNKNOWN'
    }
    
    console.log(resultJust.caseOf(matcher)) // 'Jayson'
    console.log(resultNothing.caseOf(matcher)) // 'UNKNOWN'
    
    

    Type parameters

    • T

    • U

    Parameters

    • f: (value: T) => Nullable<U>
        • (value: T): Nullable<U>
        • Parameters

          • value: T

          Returns Nullable<U>

    • value: Nullable<T>

    Returns Maybe<NonNullable<U>>

  • Just curried lift.

    (a -> b) -> a -> Maybe(b)

    Type parameters

    • T

    • U

    Parameters

    • f: (value: T) => Nullable<U>
        • (value: T): Nullable<U>
        • Parameters

          • value: T

          Returns Nullable<U>

    Returns (value: Nullable<T>) => Maybe<NonNullable<U>>

      • (value: Nullable<T>): Maybe<NonNullable<U>>
      • Parameters

        • value: Nullable<T>

        Returns Maybe<NonNullable<U>>

map

  • map<T, U>(f: (value: T) => Nullable<U>, maybe: Maybe<T>): Maybe<NonNullable<U>>
  • map<T, U>(f: (value: T) => Nullable<U>): (maybe: Maybe<T>) => Maybe<NonNullable<U>>
  • Method like Maybe.map but to get maybe and call method map with a function.

    import { Maybe } from 'monad-maniac'
    
    const foo = Maybe.of(12)
    const mappedFoo = Maybe.map((x) => x * x, foo) // Just(144)
    

    Type parameters

    • T

    • U

    Parameters

    • f: (value: T) => Nullable<U>
        • (value: T): Nullable<U>
        • Parameters

          • value: T

          Returns Nullable<U>

    • maybe: Maybe<T>

    Returns Maybe<NonNullable<U>>

  • Just curried map.

    (a -> b) -> Maybe(a) -> Maybe(b)

    Type parameters

    • T

    • U

    Parameters

    • f: (value: T) => Nullable<U>
        • (value: T): Nullable<U>
        • Parameters

          • value: T

          Returns Nullable<U>

    Returns (maybe: Maybe<T>) => Maybe<NonNullable<U>>

nothing

  • nothing<T>(): Maybe<NonNullable<T>>
  • Returns Nothing()

    Type parameters

    • T

    Returns Maybe<NonNullable<T>>

of

  • of<T>(value: T | null | undefined): Shape<NonNullable<T>>
  • Create a Maybe from any value. If value will null or undefined this become Nothing() else this be Just(value).

    import { Maybe } from 'monad-maniac'
    
    const foo = Maybe.of<string>(null) // foo will Nothing()
    const bar = Maybe.of<string>('hello') // bar will Just(hello)
    

    Type parameters

    • T

      The type of the item contained in the Maybe.

    Parameters

    • value: T | null | undefined

      The value to wrap in a Maybe. If it is undefined or null, the result will be Nothing; otherwise it will be Just with value with your type.

    Returns Shape<NonNullable<T>>

toEither

  • toEither<U, T>(leftValue: U, maybe: Maybe<T>): Either<U, T>
  • toEither<U, T>(leftValue: U): (maybe: Maybe<T>) => Either<U, T>
  • Method like Maybe.toEither but to get maybe and call method toEither with a left value.

    import { Maybe } from 'monad-maniac'
    
    const foo = Maybe.of(12)
    const resultFoo = Maybe.map((x) => x * x, foo) // Just(144)
    const eitherFoo = Maybe.toEither('Some Error', resultFoo) // Either.Right(144)
    const resultBar = Maybe.map((x) => x * x, foo).filter((x) => x < 100) // Nothing()
    const eitherBar = Maybe.toEither('X greater than 100', resultBar) // Either.Left(X greater than 100)
    

    Type parameters

    • U

    • T

    Parameters

    • leftValue: U
    • maybe: Maybe<T>

    Returns Either<U, T>

  • Just curried toEither.

    (a -> b) -> Maybe(a) -> b

    Type parameters

    • U

    • T

    Parameters

    • leftValue: U

    Returns (maybe: Maybe<T>) => Either<U, T>

Generated using TypeDoc