generated at
「ライブラリを使うときに「 使うがexposeしない 」という段階が個人的にある話
よく思っていることを言語化

「使うがexposeしない」というレベルがあることを書きたくて書いている。
exposeしないが意味するのは、例えば自分でライブラリを作ろうとしているとする。
このときに自分のライブラリの内部だけ隠蔽されて使われるライブラリ。
つまり、自分のライブラリのどの関数の引数にも登場せず、どの関数の戻り値にも登場しない。関数に限らず定数も。
全部を網羅できそうな言い方は、自分のライブラリのドキュメントを作ったときに、exposeしたくない使っているライブラリの型が登場しないという風になると思う。
目的は、使っているライブラリを他のライブラリに移行するときに破壊的な変更せずに済ませたいから。

例えば個人的にexposeしないようにしているライブラリはTypeScriptのバリデーションなどで使うio-ts
Eitherとかよく出てくるけどHaskellScalaと違って標準ではなくio-tsで定義されているものになる。
もし自分のライブラリでEitherをexposeすると、自分のライブラリを使う人にもio-tsを利用することを強制することになる。
exposeする可能性があるとすれば、io-tsの"ための"のhelperライブラリを作る時。あたりまえだがその時は遠慮なくexpose。

同じような理由でScalaをやっていた時もScalazCatsを避けていて、どうしてもモナドトランスフォーマーが必要なときに限定的に使うという約束を決めて使った覚えがある。

個人的にはポータビリティをすごく意識してものを作っているつもり。だから標準ライブラリでなるべく完結をしたい。依存が増えるといざ大きく動こうとしたときに足かせになる。