{"provider_name":"Hatena Blog","published":"2015-09-29 21:28:17","type":"rich","height":"190","blog_url":"https://takafumi-s.hatenablog.com/","width":"100%","version":"1.0","image_url":null,"html":"<iframe src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Ftakafumi-s.hatenablog.com%2Fentry%2F2015%2F09%2F29%2F212817\" title=\"\u3010Haskell\u3011 \u30e2\u30ca\u30c9\u7c21\u5358\u307e\u3068\u3081 - takafumi blog\" class=\"embed-card embed-blogcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe>","categories":["Haskell"],"url":"https://takafumi-s.hatenablog.com/entry/2015/09/29/212817","blog_title":"takafumi blog","title":"\u3010Haskell\u3011 \u30e2\u30ca\u30c9\u7c21\u5358\u307e\u3068\u3081","author_url":"https://blog.hatena.ne.jp/takafumi-s/","author_name":"takafumi-s","provider_url":"https://hatena.blog","description":"\u74b0\u5883 ghc 7.8.3 CentOS7.0 \u300c\u3059\u3054\u3044Haskell\u305f\u306e\u3057\u304f\u5b66\u307c\u3046\uff01\u300d\u7b2c13\u7ae0 \u30e1\u30e2 \u7c21\u6613Monad\u307e\u3068\u3081 Monad(\u30e2\u30ca\u30c9) \u25bd\u5b9a\u7fa9 class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b (>>) :: m a -> m b -> m b x >> y = x >>= \\_ -> y fail :: String -> m a fail msg = error msg \u25bdMonad\u3068\u306f? \u51c4\u3044\u7c21\u7565\u8aac\u660e\u3002 \u7bb1\u306b\u5165\u3063\u305f\u5024Monad m => m a\u306b\u5bfe\u3057\u3066\u3001a -> m b\u3068\u3044\u3046\u95a2\u6570\u3092>\u2026"}