1
Fork 0

typescript(option): refactor: refactored everything to use unwrap instead of match

Signed-off-by: prescientmoon <git@moonythm.dev>
This commit is contained in:
Matei Adriel 2019-12-26 16:22:10 +02:00 committed by prescientmoon
parent 6dc868c5fb
commit 69dcaa5e91
Signed by: prescientmoon
SSH key fingerprint: SHA256:UUF9JT2s8Xfyv76b8ZuVL7XrmimH4o49p4b+iexbVH4
14 changed files with 33 additions and 45 deletions

View file

@ -1,10 +1,10 @@
import { Binder } from '../internalTypes' import { Binder } from '../internalTypes'
import { Option, None } from '../types' import { Option, None } from '../types'
import { match } from './match' import { unwrap } from './unwrap'
export const bind = <T, U>( export const bind = <T, U>(
binder: Binder<T, U>, binder: Binder<T, U>,
option: Option<T> option: Option<T>
): Option<U> => { ): Option<U> => {
return match(binder, None, option) return unwrap(None, binder, option)
} }

View file

@ -1,10 +1,10 @@
import { Mapper } from '../internalTypes' import { Mapper } from '../internalTypes'
import { Option, None } from '../types' import { Option, None } from '../types'
import { match } from './match' import { unwrap } from './unwrap'
export const bindAsync = <T, U>( export const bindAsync = <T, U>(
binder: Mapper<T, Promise<Option<U>>>, binder: Mapper<T, Promise<Option<U>>>,
option: Option<T> option: Option<T>
): Promise<Option<U>> => { ): Promise<Option<U>> => {
return match(binder, Promise.resolve(None), option) return unwrap(Promise.resolve(None), binder, option)
} }

View file

@ -1,7 +1,7 @@
import { match } from './match' import { unwrap } from './unwrap'
import { Predicate } from '../internalTypes' import { Predicate } from '../internalTypes'
import { Option } from '../types' import { Option } from '../types'
export const exists = <T>(predicate: Predicate<T>, option: Option<T>) => { export const exists = <T>(predicate: Predicate<T>, option: Option<T>) => {
return match(predicate, false, option) return unwrap(false, predicate, option)
} }

View file

@ -1,7 +1,7 @@
import { match } from './match' import { unwrap } from './unwrap'
import { Some, None, Option } from '../types' import { Some, None, Option } from '../types'
import { Predicate } from '../internalTypes' import { Predicate } from '../internalTypes'
export const filter = <T>(predicate: Predicate<T>, option: Option<T>) => { export const filter = <T>(predicate: Predicate<T>, option: Option<T>) => {
return match(v => (predicate(v) ? Some(v) : None), None, option) return unwrap(None, v => (predicate(v) ? Some(v) : None), option)
} }

View file

@ -1,4 +1,4 @@
import { match } from './match' import { unwrap } from './unwrap'
import { Option } from '../types' import { Option } from '../types'
import { Folder } from '../internalTypes' import { Folder } from '../internalTypes'
@ -7,5 +7,5 @@ export const fold = <T, U>(
initial: U, initial: U,
option: Option<T> option: Option<T>
) => { ) => {
return match(v => folder(initial, v), initial, option) return unwrap(initial, v => folder(initial, v), option)
} }

View file

@ -1,4 +1,4 @@
import { match } from './match' import { unwrap } from './unwrap'
import { Option } from '../types' import { Option } from '../types'
import { BackFolder } from '../internalTypes' import { BackFolder } from '../internalTypes'
@ -7,5 +7,5 @@ export const foldback = <T, U>(
option: Option<T>, option: Option<T>,
initial: U initial: U
) => { ) => {
return match(v => folder(v, initial), initial, option) return unwrap(initial, v => folder(v, initial), option)
} }

View file

@ -1,7 +1,7 @@
import { match } from './match' import { unwrap } from './unwrap'
import { Predicate } from '../internalTypes' import { Predicate } from '../internalTypes'
import { Option } from '../types' import { Option } from '../types'
export const forall = <T>(predicate: Predicate<T>, option: Option<T>) => { export const forall = <T>(predicate: Predicate<T>, option: Option<T>) => {
return match(predicate, true, option) return unwrap(true, predicate, option)
} }

View file

@ -1,4 +1,4 @@
import { match } from './match' import { unwrap } from './unwrap'
import { Mapper } from '../internalTypes' import { Mapper } from '../internalTypes'
import { Option, Some, None } from '../types' import { Option, Some, None } from '../types'
@ -6,5 +6,5 @@ export const map = <T, U>(
mapper: Mapper<T, U>, mapper: Mapper<T, U>,
option: Option<T> option: Option<T>
): Option<U> => { ): Option<U> => {
return match(v => Some(mapper(v)), None, option) return unwrap(None, v => Some(mapper(v)), option)
} }

View file

@ -1,14 +1,14 @@
import { Option, None, Some } from '../types' import { Option, None, Some } from '../types'
import { Mapper } from '../internalTypes' import { Mapper } from '../internalTypes'
import { match } from './match' import { unwrap } from './unwrap'
export const mapAsync = <T, U>( export const mapAsync = <T, U>(
mapper: Mapper<T, Promise<U>>, mapper: Mapper<T, Promise<U>>,
option: Option<T> option: Option<T>
) => { ) => {
return match( return unwrap(
value => mapper(value).then(Some),
Promise.resolve(None), Promise.resolve(None),
value => mapper(value).then(Some),
option option
) )
} }

View file

@ -1,15 +0,0 @@
import { Option } from '../types'
import { Mapper } from '../internalTypes'
import { isSome } from './isSome'
export const match = <T, U>(
caseSome: Mapper<T, U>,
_default: U,
option: Option<T>
) => {
if (isSome(option)) {
return caseSome(option as T)
}
return _default
}

View file

@ -1,6 +1,6 @@
import { match } from './match' import { unwrap } from './unwrap'
import { Option } from '../types' import { Option } from '../types'
export const toArray = <T>(option: Option<T>) => { export const toArray = <T>(option: Option<T>) => {
return match(v => [v], [], option) return unwrap([], v => [v], option)
} }

View file

@ -1,7 +1,7 @@
import { match } from './match' import { unwrap } from './unwrap'
import { identity } from '@thi.ng/compose' import { identity } from '@thi.ng/compose'
import { Option } from '../types' import { Option } from '../types'
export const toNullable = <T>(option: Option<T>) => { export const toNullable = <T>(option: Option<T>) => {
return match(identity, null, option) return unwrap(null, identity, option)
} }

View file

@ -1,7 +1,6 @@
import { Mapper } from '../internalTypes'
import { Option } from '../types' import { Option } from '../types'
import { withDefault } from './withDefault' import { Mapper } from '../internalTypes'
import { map } from './map' import { isSome } from './isSome'
/** /**
* Apply the function to the value in the Maybe and return it unwrapped. * Apply the function to the value in the Maybe and return it unwrapped.
@ -13,8 +12,12 @@ import { map } from './map'
*/ */
export const unwrap = <T, U>( export const unwrap = <T, U>(
_default: U, _default: U,
mapper: Mapper<T, U>, caseSome: Mapper<T, U>,
option: Option<T> option: Option<T>
) => { ) => {
return withDefault(_default, map(mapper, option)) if (isSome(option)) {
return caseSome(option as T)
}
return _default
} }

View file

@ -1,4 +1,4 @@
import { match } from './match' import { unwrap } from './unwrap'
import { identity } from '@thi.ng/compose' import { identity } from '@thi.ng/compose'
import { Option } from '../types' import { Option } from '../types'
@ -9,5 +9,5 @@ import { Option } from '../types'
* @param option The option to get the default of. * @param option The option to get the default of.
*/ */
export const withDefault = <T>(_default: T, option: Option<T>) => { export const withDefault = <T>(_default: T, option: Option<T>) => {
return match(identity, _default, option) return unwrap(_default, identity, option)
} }