まとめ 黒魔術を使うと米田の補題による制限を回避して自由闊達に関数が書けます。 前提知識 Haskell の知識、多相関数に関する知識を仮定します。圏論の知識はほとんど仮定しません。 説明 記法 F や A などの大文字始まりの型名はすべてなんらかの具体的な型がそこに入ります。 x や a などの小文字始まりの型名は型変数です。(Haskell での流儀と一緒です。) 自然変換 Functor インスタンスが実装されている 2 種類の型 F と G、および多相関数 u :: forall x. F x -> G x について、以下のような法則が成り立つ時、u は自然変換であるといいます。
![米田の補題、Free theorem と病的な Haskell の関数 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/243cd46506fc84642b2d4510e0317a55cfbee050/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUU3JUIxJUIzJUU3JTk0JUIwJUUzJTgxJUFFJUU4JUEzJTlDJUU5JUExJThDJUUzJTgwJTgxRnJlZSUyMHRoZW9yZW0lMjAlRTMlODElQTglRTclOTclODUlRTclOUElODQlRTMlODElQUElMjBIYXNrZWxsJTIwJUUzJTgxJUFFJUU5JTk2JUEyJUU2JTk1JUIwJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1kMzQwZTg0YjIyZTAzMDExY2UxOWFiZTU2MmYxMTYwOQ%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBrb2JhZTk2NCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9Y2NkMTliMGYwMTgyMWM5MjUxOTIyMWJiNjdjZTk4MmU%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D7d9162e8d27b3fa2a41d6e70bd4fe63e)