タグ

ブックマーク / qiita.com/hiratara (2)

  • type roleについて学ぶ

    Haskell Advent Calendar 2015 の 3日目は、最近 洗濯機 を新調した @hiratara がお送りします。 気が付けばもうクリスマスシーズン、みなさんは今年どのくらいHaskellのコードを書きましたか? 私は最近はGoPerlしか書いてないのですが、今年の夏 レガシーなコードをstackでビルドできるようにする ってことをやっていました。今日はその時に出くわしたあるエラーに関連する話を書きます。 イカ 以下がそのエラーなのですが、これを見てパッと対処法が浮かびますか? src/MO/Run.hs-boot:6:1: Type constructor ‘AnyResponder’ has conflicting definitions in the module and its hs-boot file Main module: type role AnyRe

    type roleについて学ぶ
  • MonadTrans型クラス - Qiita

    lift . return = return lift (m >>= f) = lift m >>= (lift . f) 今まではなんとなくモナドの分配則で語るべき話かと思ってたんだけど、微妙に違うっぽい。具体的には、liftはモナド間の射(monad morphism)として定義されている。確かに、求められる法則を見るとreturnと(>>=)の構造を保持するような規則と読み取れる。 ところで、モナドは関手なので、その間の射であれば自然変換であるべきだ。liftも計算してみるときちんと自然変換になっている。f :: a -> bについて可換性を見てみる。 (lift . (fmap f)) mx = lift(fmap f mx) = lift(mx >>= (return . f)) -- fmapの定義 = lift mx >>= (lift . return . f) -- 法則

    MonadTrans型クラス - Qiita
  • 1