2011-09-19 12 views
7

私はちょうどパッケージのOneTupleをハックしました。私はそれが目的であることを知りたがっていますが、著者はそれを楽しくするために作成していないと確信しています。だからいつこれが役に立つの?それが何をしているのかははっきりしていますが、誰がそれを使うのかは分かりません。OneTupleはいつ使用しますか?

だから、誰もがこの恩恵を受けることができる素晴らしい例を知っていますか?あるいは、数学的な美しさを背後に見せてもらえますか?

+1

"私は作者がそれを楽しむためだけに作成していないと確信しています" - ここでは、ハスケルコミュニティのユーモアセンスを過小評価しているかもしれません。 – MatrixFrog

+0

カエルと言ったこと。既存のパッケージの実際の理由がないパッケージの例については、acmeパッケージカテゴリを参照してください。 –

答えて

3

OneTupledata代わりにnewtypeを使用するので、それは追加のボトム値を有することを除いて、一般的にモナド変圧器スタックのベースとして使用されるIdentityモナド、ほぼ同じです。

これは、実装しているほとんどの型クラスの最も単純な例であるため、面白いです。私はそれのための実用的な使用の多くは、表示されません。

+2

私は、インサイドの追加層を作成する際にのみ、実際の使用方法を見ています。 – fuz

2

don'tパッケージのような冗談だと思います。つまり、OneTupleは、Maybeとは対照的に、いずれのタイプにも1つの新しい値を追加します(NothingJust undefinedまたはundefinedの2つが追加されます)。だから、それが必要な場合は、どこに行くのか分かります...

+0

'' don't'は、デバッグの目的には非常に便利だと思われます。たとえば、モナド操作を「コメントアウト」したい場合などです。 – fuz

+2

私はそれに '--'演算子を使います:-) – sclv

4

タプルで動作する(少しばかげた)タイプクラスがあるとします。 (a,a)のインスタンス、(a,a,a)のインスタンスがあります。単一の値のインスタンスも必要です。しかし、他のすべてと重複するので、aのインスタンスを作ることはできません!ただし、OneTuple aのインスタンスを作成することはできます。

typeclassはちょっと役に立たないですが、ほぼ同じようなtypeclassを想像するのは簡単ですが、もっと便利です。実際には、これは正確にBOS' mysqlのライブラリでOnlyの使用である:http://hackage.haskell.org/packages/archive/mysql-simple/0.2.0.2/doc/html/Database-MySQL-Simple-QueryResults.html

3

これはアイデンティティモナドの実装は冗談ではありません同じように、最も確かない冗談です。プレーンタイプaとは異なり、すべての有益なインスタンスが得られます。追加ボトムを取得すると、シングルトンタプルは他のタプルタイプのセマンティクスに非常に近くなります。

この場合のユースケースの1つは、同一性モナドと同様に、一般化です。あなたは多型ファンクタ型を持つアプリケーション/モナド関数を持っています。例えば、列挙子のような多くの有用なパッケージは、ユーザーが選択したモナドを操作することをサポートしています。 の少し異なるセマンティクス(Identityと比較)は、複雑なデータ依存関係を持っている場合や、追加の怠惰を利用したい場合には非常に便利です(Identity)。

関連する問題