// @flow
import type { Result } from "../Result";
import type { ExtractValue } from "../types";
export type Option = A | null | void;
declare export var Some: (value: $NonMaybeType) => Option;
declare export var None: Option;
/**
* Returns `Some(value)` if the provided value is non-nullable, otherwise, returns `None`.
*/
declare export function fromNullable(value: A): Option>;
/**
* Returns `Some(value)` if the provided value is not falsy, otherwise, returns `None`.
*/
declare export function fromFalsy(value: A): Option>;
/**
* Returns `Some(value)` if the given predicate function returns `true`, otherwise, returns `None`.
*/
declare export function fromPredicate(
value: A,
predicateFn: (value: $NonMaybeType) => boolean
): Option>;
declare export function fromPredicate(
predicateFn: (value: $NonMaybeType) => boolean
): (value: A) => Option>;
/**
* Returns `Some(value)` (`value` is the result of `fn`) if `fn` didn't throw an error, otherwise, returns `None`.
*/
declare export function fromExecution(fn: () => A): Option>;
/**
* Returns `Some(value)` if `promise` is resolved successfully, otherwise, returns `None`.
*/
declare export function fromPromise(
promise: Promise
): Promise