型って「どういうことをしてほしいか」っていう 要件 の役割を持ってて、
一方で実装って「どうやってその要件を実現するか」っていう 具体的な手順 の役割を持ってますよね。
ところで仕事ができる人って、「こういうことやりたいな〜って思ってるんだけど〜」って伝えると、
「あ、それなら具体的にこういうやり方をすると良さそうですね〜」って自分で考えて提案して実行してくれてめちゃくちゃ助かるじゃないですか。
そしたら、プログラムの世界でも同じで、要件 (型) だけ書いたら 具体的な手順 (実装) を自動で導出してくれる未来が来たら嬉しい感じがしませんか?
ざんね〜ん! 未来ではなくそれは現代のお話でした〜!
type MyApi = "books" :> Get '[JSON] [Book] -- GET /books
:<|> "books" :> ReqBody Book :> Post '[JSON] Book -- POST /books
myApi :: Proxy MyApi
myApi = Proxy
getAllBooks :: Manager -> BaseUrl -> ExceptT String IO [Book]
postNewBook :: Book -> Manager -> BaseUrl -> ExceptT String IO Book
-- 'client' allows you to produce operations to query an API from a client.
(getAllBooks :<|> postNewBook) = client myApi
Haskell の servant-client は上記のように型を書くだけで、
実際に何かのWeb APIに対してリクエストを投げてその結果をパージングしてくれる関数の実装が自動で生成されます。
もう、「型推論が進化したら人間は型を意識しないでいいようになる」なんてあほなこと言っていい時代じゃないんですね!