タグ

maybeに関するkiyo_hikoのブックマーク (11)

  • オブジェクト指向&関数型言語でなぜつくるのか - IOモナドで副作用を実現する

    『IOモナドで副作用を実現する』 以下の文章は、第13章の一部として「関数型言語の7つの特徴」のあとの「関数型言語の分類」に続く節として書いたものです。 他の文章に比べてバランスが悪かったため、最終段階でボツにしました。 →『オブジェクト指向でなぜつくるのか第2版』のサポートページへ 純粋関数型言語であっても、プログラム全体としては画面やデータベースやネットワークなどとの外部入出力を実現する必要があります。このため、言語仕様として副作用を認めないとしても、なんらかの仕組みを用意して入出力を実現する必要があります。これはHaskellでは「モナド」と呼ぶ仕組みが相当します。今のところモナドを言語標準の仕組みにしているのはHaskellだけですが、わかりづらいことで悪名高い仕組みでもあるため、ここで概要を説明しておきましょう。突っ込んだ内容になりますので、Haskellやモナドに特別な関心が

  • Coding: Maybe vs Null Object patterns | Mark Needham

    On the project I’m currently working on my colleague Christian Blunden has introduced a version of the Maybe type into the code base, a concept that originally derives from the world of functional programming. The code looks a bit like this: public interface Maybe<T> { bool HasValue(); T Value(); } public class Some<T> : Maybe<T> { private readonly T t; public Some(T t) { this.t = t; } public bool

    kiyo_hiko
    kiyo_hiko 2012/11/27
    「readonly T t」にnullを入れるのを避けて別クラスNoneにしてる理由がいまいち理解できてない
  • Java の語彙で Maybe を説明してみる - ぐるぐる~

    java-jaで例外処理の話をしてきました - 西尾泰和のはてなダイアリー を読んで。 Maybe は値があるかないかを型で表すことができます!そう、直和型なんです!とか言われてもイミフだと思うのです(リンク先のエントリがそう説明してるわけではないですが)。 Java の語彙で Maybe の説明をできたら嬉しい人もいるんじゃないかなぁ、とかなんとか。 ただし、書いてたら結構長くなりました。時間がある人はどうぞ。 Maybe? null より安全に「値がないこと」が扱えるものだよ スタート地点としてはこれでいいでしょう。 以降で、「なんで安全なの?」という全うな疑問に答えてみたいと思います。 問題点 int で説明すると煙に巻いてしまうような気がしたので、User クラスを見てみます。 import java.util.*; class User { final String name;

    Java の語彙で Maybe を説明してみる - ぐるぐる~
  • What operator should perl5porters use for safe dereferencing?

    kiyo_hiko
    kiyo_hiko 2012/06/01
    「~>」は正規表現の親戚みたいで気に入らないので、「?->」に入れておいたました
  • [Cl-monad-macros-cvs] r6 - trunk

    kiyo_hiko
    kiyo_hiko 2012/03/09
    いつか読む / なんとなく「Maybeとprogn組み合わせたら業務ロジック書くには無敵じゃね?(バカみたいに簡単に記述できるんじゃ)」と思いついて検索したら出てきた
  • Null pointers vs None vs Maybe

  • Maybeを知った。 - ちゃまぐの備忘録

    package Test; use Mouse; has hoge => ( is => 'rw', isa => 'Str', ); package main; my $test = Test->new; $test->hoge( undef ); こんな感じで、isaでStrを指定したアトリビュートにundefを書き込もうとすると怒られる。 理由は簡単で、Str型は文字列ではないundefを書き込むことができないというだけ。 これを知らなかった。勉強不足ですね。 文字列とundefも入れたいという場合は、以下のようにMaybeを使うといい。 has hoge => ( is => 'rw', isa => 'Maybe[Str]', ); 参考 http://perldoc.perlassociation.org/pod/Moose-Doc-JA/Moose/Manual/Types.

    Maybeを知った。 - ちゃまぐの備忘録
    kiyo_hiko
    kiyo_hiko 2012/01/31
    興味深い。MooseでMaybe使えるなら、自前で書いたMaybeもどきよりMooseのほうがハッピーになりそう
  • The Haskell 98 Library Report: Maybe Utilities

    module Maybe( isJust, isNothing, fromJust, fromMaybe, listToMaybe, maybeToList, catMaybes, mapMaybe, -- ...and what the Prelude exports Maybe(Nothing, Just), maybe ) where isJust, isNothing    :: Maybe a -> Bool fromJust             :: Maybe a -> a fromMaybe            :: a -> Maybe a -> a listToMaybe          :: [a] -> Maybe a maybeToList          :: Maybe a -> [a] catMaybes            :: [Maybe 

    kiyo_hiko
    kiyo_hiko 2011/12/18
    「maybeToList :: Maybe a -> [a]; maybeToList Nothing = []; maybeToList (Just a) = [a]」「listToMaybe :: [a] -> Maybe a; listToMaybe [] = Nothing; listToMaybe (a:_) = Just a」・・・なるほど
  • Meet the Monads

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

  • モナドを実装する(Python編) | Webシステム開発/教育ソリューションのタイムインターメディア

    発端 モナドの正体が分かると、 次はモナドを実装してみたくなるものです。 という訳で試しに Python でモナドを実装してみましょう。 別にどんな言語でも構わないのですが、 クロージャや部分適用が簡単に使えない言語では質的でないところで苦労する羽目になるので、 今回は Python を使うことにしました。 なお、今回作成した Python によるモナドの実装は GitHub で公開中です。 方針 モナドの具体例で一番簡単なものは Maybe でしょう。 まずは Maybe を Python のクラスとして実装して、 そこから一般的なところを括りだして Monad クラスを作ることにしましょう。 モナドの構成要素は以下の3つです: 普通の値をモナドにラップするための型 m普通の値を m にラップするための関数 returnモナドでラップされた普通の値を取り出して処理を行う演算子 >>=

    モナドを実装する(Python編) | Webシステム開発/教育ソリューションのタイムインターメディア
  • Perlでモナドを学ぶ - Maybeモナド編 - Pixel Pedals of Tomakomai

    Maybeモナドの実装です。 簡単な解説 Maybeモナドの関手のT_objectは、渡された集合に対して、すべてをリファレンス化した集合にundefを加えたものに移します。こうすることによって、元々持っていた値を全て表現すると同時に新しいundefと言う値を手に入れられます。undefがHaskellのNothingとなります。 実装 リファレンスをとる処理がうざかったので、ヘルパー関数にまとめました。こいつの名前をjustにしたので、Haskellっぽくなりました*1。 sub just { my $value = shift; return \$value; } my $list_monad = Monad->new( T_arrow => sub { my $arrow = shift; # A -> B return sub { my $tx = shift; # TA -> T

    Perlでモナドを学ぶ - Maybeモナド編 - Pixel Pedals of Tomakomai
  • 1