曖昧な質問となってしまい申し訳ありませんが
https://zenn.dev/osio/articles/2022-advent-calendar
に、以下のようなものがありました。
Hoogle で join を調べ以下のような定義ということがわかりました。
これらをまとめると、以下になると思います。
しばらく考えて、なんとなく関数モナドかなと思い、定義に当てはめて
ここに引数を与えて、最終的に
と、ここまできてようやく納得できました。
前置きが長くなりましたが、`(*)` が関数であるため関数モナドに決まってるでしょ。
と、言われてしまえばそれまでなのですが、`(*)
https://zenn.dev/osio/articles/2022-advent-calendar
に、以下のようなものがありました。
import Control.Monad (join) f = join f (*) 5 --> 25 = 5 * 5
Hoogle で join を調べ以下のような定義ということがわかりました。
join :: (Monad m) => m (m a) -> m a join x = x >>= id
これらをまとめると、以下になると思います。
join (*) = (*) >>= id
しばらく考えて、なんとなく関数モナドかなと思い、定義に当てはめて
h >>= f = \w -> id ((*) w) w
ここに引数を与えて、最終的に
id ((*) 5) 5 ==> (*) 5 5
と、ここまできてようやく納得できました。
前置きが長くなりましたが、`(*)` が関数であるため関数モナドに決まってるでしょ。
と、言われてしまえばそれまでなのですが、`(*)
= id` のようなものを見て、それが関数モナド ((->) r) であると導き出すのは経験しかないのでしょうか ?