IT練習ノートスマートフォン用の表示で見るIT練習ノートIT関連で調べたこと(実際は嵌ったこと)を書いています。2014-12-27Monadのfail関数について思ったことHaskellMonadのチュートリアルでほとんど語られることがないfailについて確認します。aという定義があります。形式的には、returnに似ていますが、fail関数は、第一パラメータの型がStringと明示的になっています。失敗させたからExceptionが表示されています。この時点で?となりました。そもそも、これで動作してしまうのは、おかしいのではないかと。どの型のfailか指定していないのに、なんでこうなるのかと。わかってしまえば簡単で、Prelude上で動作させているので、IOモナドと解釈されています。このことは後で確認します。Maybeを指定して実行してみると。おっと、Maybe自体は具体型ではなかった。なり、Nothingが帰ってきます。Nothingなので、failに何を与えてもNothingと。StringNothing確かに、何を与えてもNothingですね。Maybe自体が失敗を含んだ概念なので、fail関数自体が冗長なのでしょう。それでは、別の型も確認してみます。rfailの定義はありませんでした!ということはMonadに定義されているはず。sデフォルト実装は`error関数のようです。s)とErrorCallに包んで、throw関数に与えています。e)となっており、IOモナドとして処理されるようです。raise#となっているのは、深入りはやめて、こっから先はCの世界に入るのでしょうか。話が、だいぶそれましたが、Etiherモナドのfail関数はデフォルト実装を使っているということでした。どこかで聞いたことがあるような、ないような。非決定性の失敗は、要素ゼロとするということですね。これが、最初にやった、型を指定していないときと同じですね。itおっと、表示できないですよと。a)なので、関数そのものが返却されるからprintしようがないのですね。一回バインドした上で、関数適用してみると。確かに、エラー文字列が出てきました。abcと、なぜか、先頭にだぶるクォーテーションが出てくるのは、なんか意味あるんでしょうか。バグのような気もしますが。r)のfail関数場合、関数といいつつも、結果は、実際の結果側の型にはならず、IOモナドとして処理されるようです。下記の例では、作った関数は、Charの結果を期待しますが、関数適用させると、Char型のデータは帰ってきません。ここまで書いてMonadチュートリアルにfailがほとんど出てこないのが分かった気がしてきた。Applicationが導入されました。Classは以下の4つの観点から理解するとよい。イ...2015-09-19HaskellのEitherとeitherEitherという型がありますが、eitherという関数もあります。月別アーカイブはてなブログをはじめよう!naotoogawaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。