什么时候想要使用OneTuple?

时间:2011-09-19 17:49:32

标签: haskell tuples

我偶然发现了关于hackage的OneTuple包。我想知道它的目的,我确信作者并不是为了它的乐趣而创造它。那么这什么时候有用呢?很清楚它的作用,但不会在人们使用它的时候。

那么,任何人都知道任何一个很好的例子,你可以从中受益吗?或者也许展示它背后的数学美?

4 个答案:

答案 0 :(得分:4)

它与Identity monad几乎相同,后者通常用作monad变换器堆栈的基础,但由于OneTuple使用data而不是newtype它有一个额外的底值。

这很有趣,因为它在某种意义上是它实现的大多数类型类的最简单的例子。不过,我认为它没有太多实际用途。

答案 1 :(得分:4)

假设你有一个(稍微愚蠢的)类型类对元组进行操作。您有(a,a)的实例,(a,a,a)的实例。您还需要一个实例作为单个值。但你不能只为a创建一个实例,因为这会与其他一切重叠!但是,您可以为OneTuple a创建一个实例。

现在类型类有点无用了,但是很容易想象一个类型类差不多但更有用。实际上,这正是在bos的mysql库中使用Onlyhttp://hackage.haskell.org/packages/archive/mysql-simple/0.2.0.2/doc/html/Database-MySQL-Simple-QueryResults.html

答案 2 :(得分:3)

这肯定是不是一个笑话,就像身份monad实现不是一个笑话一样。与普通类型a不同,您可以获得所有有用的实例,并获得额外的底部,这使得单例元组更接近其他元组类型的语义。

一个用例就像身份monad一样,泛化。你有一个applicative / monadic函数,它有一个多态函数类型。例如,许多有用的包如枚举器支持在用户选择的monad上操作。 OneTuple(与Identity相比)稍微不同的语义可能非常有用,当您有复杂的数据依赖关系或想要利用额外的懒惰时,Identity不会给出你。

答案 3 :(得分:2)

我认为这是一个笑话,比如don't包。也就是说,OneTuple确实为任何类型添加了一个新值(与Maybe相对,后者增加了两个:NothingJust undefinedundefined取决于你的船如何摇摆)。所以,如果事实证明你需要它,你知道去哪里......