fp-ts
TypeScriptで関数型プログラミングをするlibrary
Announcement: following the official decision to merge the fp-ts project with the Effect-TS ecosystem, active development has been transferred to the repository https://github.com/Effect-TS/data. ref We have made the decision to unite and collaborate on *Effect* as a generational project that aims to create a more cohesive and powerful ecosystem of libraries that are accessible and useful to developers of all levels.
型
etc.
import
2種類ある
code:ts
import { Option } from 'fp-ts/lib/Option'; // CommonJS
import { Option } from 'fp-ts/es6/Option'; // ESModule
ESModuleの方にするとTreeShakingによりバンドルサイズが削減できる
Node.js上で動かすならCommonJSを使う
pipe
code:ts
import * as O from 'fp-ts/lib/Option'
import { identity } from 'fp-ts/lib/function'
import { pipeable } from 'fp-ts'
pipeable.pipe(
O.some(42), // O.Option<number>
O.chain(n => n === 42 ? O.some('Answer to Everything') : O.none), // (ma: O.Option<number>) => O.Option<string>
O.fold(() => 'No Answer', identity) // (ma: O.Option<string>) => string
) // string
数値型で例えば18~100の間だけであることを保証する
例
関数型プログラミングできるのは良いのだが、プロダクト全体がfp-tsに大依存してしまいそうで怖い
プロダクト全体で使うものなのか、それとも、ロジックゴリゴリのところで局所的に使うのかどっちなんだろう
例えばparserとか、RESTとか
IO時にResult型使うとかはありそうだが
Monadとか実際どこで使うんだ
普通にTS書いているよりも冗長になる部分もあると思うので、型的にかなりメリットがないと入れる意味があるのかどうかわからないmrsekut.icon
別に、関数型プログラミングがしたいわけではない
型安全で、楽に、簡素に書ける方を選びたい
似たライブラリ
参考
fp-tsの紹介
pursとfp-tsの差異の列挙
学ぶ順序
型クラスの概念をまず理解する
その上で、個々の型クラスの役割を知る
型クラスは色々定義されているので、順々に見ていくとモチベが下がるかもしれない
であれば、個別の型のページを見つつ、そのinstancesに書かれている型クラスを順に学んで行けば良いかも
Eitherのerrorを積み重ねる
code:ts
import * as E from 'fp-ts/lib/Either';
import { sequenceT } from 'fp-ts/lib/Apply';
import * as A from 'fp-ts/lib/Array';
const hoge = E.getApplicativeValidation(A.getMonoid<string>());
console.log(sequenceT(hoge)(E.left('a'), E.left('b')));