Skip to content

Instantly share code, notes, and snippets.

@dewey92
Last active April 26, 2018 22:43
Show Gist options
  • Select an option

  • Save dewey92/2ee453d71b8382f4912c32ec19f1a66c to your computer and use it in GitHub Desktop.

Select an option

Save dewey92/2ee453d71b8382f4912c32ec19f1a66c to your computer and use it in GitHub Desktop.
Reader composition
interface User {
id: number,
name: string,
managerId: number,
}
// ambil dependency
const userRepo = (deps: Deps) => deps.userRepo; // Reader<Deps, UserRepository>
const logger = (deps: Deps) => deps.logger; // Reader<Deps, Logger>
// buat fungsi-fungsi dasar
const getUser = (userId: number) => fmap(repo => repo.get(userId), userRepo);
const saveUser = (user: User) => fmap(repo => repo.save(user), userRepo);
const log = (obj: User) => fmap(l => l.log('Logging.. ', obj), logger);
// komposisi! reuse fungsi-fungsi dasar
const getManager = composeK(
getUser,
user => (deps => user.managerId), // (user: User) => Reader<Deps, number>
getUser
)
// komposisi! reuse fungsi-fungsi dasar
const registerNewUser = composeK(
log,
saveUser,
)
// gunakan
getManager(1)(deps)
registerNewUser({ id: 2, name: 'Jihad', managerId: 1 })(deps)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment