Skip to content
This repository has been archived by the owner on May 3, 2021. It is now read-only.

Commit

Permalink
fix: updated getMonad types to be more accurate
Browse files Browse the repository at this point in the history
  • Loading branch information
baetheus committed Oct 11, 2020
1 parent dc4f416 commit 896f5d2
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
4 changes: 4 additions & 0 deletions either.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import type {
_0,
_1,
_2,
_3,
Fix,
Lazy,
Predicate,
Expand Down Expand Up @@ -271,9 +272,12 @@ export const Traversable: TC.Traversable<Either<_0, _1>, 2> = {
* @section Transformers
**************************************************************************************************/

// deno-fmt-ignore
type GetEitherMonad = {
<T, L extends 1>(M: TC.Monad<T, L>): TC.Monad<$<T, [Either<_0, _1>]>, 2>;
<T, L extends 2>(M: TC.Monad<T, L>): TC.Monad<$<T, [_0, Either<_1, _2>]>, 3>;
<T, L extends 3>(M: TC.Monad<T, L>): TC.Monad<$<T, [_0, _1, Either<_2, _3>]>, 4>;
<T, L extends 4>(M: any): unknown;
};

/**
Expand Down
20 changes: 11 additions & 9 deletions option.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type * as TC from "./type_classes.ts";
import type { $, _, Lazy, Predicate } from "./types.ts";
import type { $, _, _0, _1, _2, _3, Lazy, Predicate } from "./types.ts";

import { createSequenceStruct, createSequenceTuple } from "./sequence.ts";
import { isNotNil } from "./fns.ts";
import { constant, isNotNil } from "./fns.ts";
import * as D from "./derivations.ts";

/***************************************************************************************************
Expand Down Expand Up @@ -184,10 +184,12 @@ export const Traversable: TC.Traversable<Option<_>> = {
* @section Transformers
**************************************************************************************************/

// deno-fmt-ignore
type GetOptionMonad = {
<T, L extends 1>(M: TC.Monad<T, L>): TC.Monad<$<T, [Option<_>]>, L>;
<T, L extends 2>(M: TC.Monad<T, L>): TC.Monad<$<T, [Option<_>]>, L>;
<T, L extends 3>(M: TC.Monad<T, L>): TC.Monad<$<T, [Option<_>]>, L>;
<T, L extends 1>(M: TC.Monad<T, L>): TC.Monad<$<T, [Option<_0>]>, L>;
<T, L extends 2>(M: TC.Monad<T, L>): TC.Monad<$<T, [_0, Option<_1>]>, L>;
<T, L extends 3>(M: TC.Monad<T, L>): TC.Monad<$<T, [_0, _1, Option<_2>]>, L>;
<T, L extends 4>(M: TC.Monad<T, L>): TC.Monad<$<T, [_0, _1, _2, Option<_3>]>, L>;
};

/**
Expand All @@ -198,12 +200,12 @@ type GetOptionMonad = {
export const getOptionM: GetOptionMonad = <T>(M: TC.Monad<T>) =>
D.createMonad<$<T, [Option<_>]>>({
of: (a) => M.of(some(a)) as any,
chain: <A, B>(fatb: any, ta: any) =>
chain: (fatb, ta) =>
M.chain(
(e: Option<A>) => (isNone(e) ? M.of(none) : fatb(e.value)),
ta,
(a: any) => isNone(a) ? M.of(a) : fatb(a) as any,
ta as any,
) as any,
}) as any;
});

/***************************************************************************************************
* @section Pipeables
Expand Down

0 comments on commit 896f5d2

Please sign in to comment.