タグ

tutorialとhaskellに関するkiyo_hikoのブックマーク (5)

  • Meet the Monads

    モナドに触れる 型構築子 Maybe というモナド 例 リストもモナド 要約 この章をつうじて、Maybe 型構築子を使うので、先にすすむ前に Maybe の使いかたと定義になれておかなければなりません。 型構築子 Haskell のモナドを理解するためには、型構築子の扱いになじんでいる必要があ ります。型構築子 は多相型をもちいたパラメータ化された型定義です。 Haskell では、一つ以上の具体的な型にたいして、型構築子を適用すると 新しい具体的な型を構築できます。Maybe の定義は、 data Maybe a = Nothing | Just a です。Maybe は型構築子で Nothing および Just はデータ構築子です。Just データ構築子を ある値に適用してデータ値を構成できます。 country = Just "China" 同様に、Maybe 型構築子をある型に

  • 図でわかる(?)モナド おまけ: 図からコードを書く - Pixel Pedals of Tomakomai

    最後に出した例ですが、 module Main where main :: IO () main = getLine >>= putStrLn . reverse モナドで悟りをひらきたいのなら - 図でわかる(?)モナド さきほどのエントリの図が全部わかれば、以下のような図も書けますね。reverseをfmapで持ち上げて橋を架け、落ちているputStrの左端を>>=で吊るし上げます。この図でできるIO StringからIO ()への関数は、モナドの性質(≒可換性)から、ありがたいことに最初の図でできる関数と同じになります。 この図から、以下のコードが書けます。 module Main where main :: IO () main = fmap reverse getLine >>= putStrLn Haskellでは関数間の型があうようにコーディングをすることが多いと思いますが、

    図でわかる(?)モナド おまけ: 図からコードを書く - Pixel Pedals of Tomakomai
  • 汝の隣人のブログを愛せよ | LOVELOG

    au one netのブログサービス 『LOVELOG』は2014年6月30日をもちまして提供を終了致しました。 永らくのご利用、誠にありがとうございました。 引き続きau one netをご愛顧いただきますよう、よろしくお願い申し上げます。 ※お手数ではございますが、新ブログにて閲覧の皆さま向けにブログURL変更等をご周知いただけますよう、お願い申し上げます。

  • Stateモナドを絵を描いて理解してみた - oto-oto-oto’s diary

    絵を描きながらStateモナドを考えてみたら意外とうまくいったので紹介します。 Stateモナドには「表の値」と「裏の値=状態」という2つの値(型)が登場します。 Stateモナドの定義です。(s -> (a,s))で、sが状態の型、aが表の値の型です。 newtype State s a = State { runState :: (s -> (a,s)) } The State monad 図の方ですが、矢印は関数です。原則として、1入力1出力の一の矢印で表しますが、今回は戻り値が2値のタプルなので2出力として書きました。 丸四角で囲ってあるのは、関数をオブジェクト*1として扱うことを意図しています。 これに対して、丸四角で囲っていない矢印は関数適用を表すことにします。 一番外側の大カッコはStateモナドのデータ構築子を表します。これでラムダを囲むとStateモナドの値になります。

    Stateモナドを絵を描いて理解してみた - oto-oto-oto’s diary
  • モナドの物理的なアナロジー

    モナドの物理的なアナロジー モナドは非常に抽象的なエンティティなので、ときには、モナドそのもの について直接考えるより、モナドのアナロジーとしての具体的なシステムを 考えるのが有用です。この方法では、物理的な直観と経験を利用して、 計算モナドの抽象的世界を再考するための洞察を得られます。 ここで展開する特殊な物理的なアナロジーは機械化された組み立てラインです。 これは、モナドに完璧に合致するものではありません。— 殊にモナド 計算の高階性ある局面の幾つかでは。— しかし、初期段階では、モナドが どのように機能するかを理解するには十分役立ちます。 Haskell のプログラムをベルトコンベヤと考えることから始めましょう。 入力はコンベヤの端に載せられ、一連のワークエリアへと運ばれます。 各ワークエリアにおいて、ベルトコンベヤ上の物品になんらかの操作が 加えられ、そしてその結果はまたベルトコン

  • 1