はじめに 本記事では、関数型言語に触れているよくでてくる モナド について書きます。モナドとは何かを説明したり理解することは割と難しいと思うのですが、その理由の一つとしては、モナドという概念が 数学 の圏論に由来しているということにあると思います。何年も前にモナドを理解するために圏論を勉強したりしてみましたが、その中に出てくるモナドと、プログラミングにおけるモナドが本当に同じものなのか、というのはしばらく疑問でした。あるとき、Stateモナド(状態モナド) を具体例として、それを数学的な定義に基づいて実装してみたことで、プログラミングと数学の関係がより明確になってモナドの理解が深まったように思うので、この機会にまとめてみます。 プログラミングと数学が密接に関係する面白い例の一つだと思うのですが、記事が長くなってしまいモナドについて興味がないと読むのは大変だと思います。適当に斜め読みしてもら
![Stateモナドを数学的に実装する - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/888376677155197c993850eca7beff3bf153d254/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9U3RhdGUlRTMlODMlQTIlRTMlODMlOEElRTMlODMlODklRTMlODIlOTIlRTYlOTUlQjAlRTUlQUQlQTYlRTclOUElODQlRTMlODElQUIlRTUlQUUlOUYlRTglQTMlODUlRTMlODElOTklRTMlODIlOEImdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzNBM0MzQyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPWYzMzQ2YWY5NmYwMTUxMzhkNThhYTUwYjVlYzljYjYw%26mark-x%3D120%26mark-y%3D96%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9OTcyJnR4dD0lNDBzZy1tYXRzdW1vdG8mdHh0LWNvbG9yPSUyMzNBM0MzQyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWNjZDUzMjE1YzZlYmVhNjg1MzE3MTlmZTk5ZDllOGU5%26blend-x%3D120%26blend-y%3D500%26blend-mode%3Dnormal%26s%3D247fea7e15989a3211db85399047f608)