2012-07-22 63 views
24

回到至少在20世紀90年代後期,有人希望以友好的方式將restricted monads整合到Haskell中。限制單子的現狀是什麼?

例如,沒有受限制的monads,您無法從SetMapprobability distributions中生成有效的monad。這是幾年前的一個SO question,在那裏有人遇到了這個問題。

有各種不同的解決方法,人們已經提出了包括:

然而,這些方法似乎都不是「規範」。我在2007年發現了Don Stewart對this blog post的評論,他在這裏暗示說我們與Indexed types限制monads「非常接近」。

當前狀態是什麼?現在是否有一種「規範」的方式來限制單子?或者我們仍然與解決方法一起生活?

+12

我會認爲約束類型是一樣的規範,他們只是有點太新,它是目前最常見的解決方案。 – leftaroundabout 2012-07-22 11:22:49

回答

11

最近有一篇由Anders Persson,Emil Axelsson和Josef Svenningson撰寫的關於編碼限制單子的方法。我忘記了細節,但我記得這是一篇很好的論文。

Persson,A.; Axelsson,E.; Svenningsson,J。(2011)。 Generic monadic constructs for embedded languages。 IFL 2011,第23屆功能語言實施與應用研討會。

+1

謝謝諾曼。對於任何感興趣的人,您可以從[Josef Svenningson的主頁](http://www.cse.chalmers.se/~josefs/)上獲得該論文的副本。 – 2012-07-23 14:55:43

10

實際上,可以無任何限制地獲得一個有效的Set monad作爲常規monad, 。以兩種不同的方式。下面的文章 解釋兩者:

http://okmij.org/ftp/Haskell/set-monad.html

文章還指出,受限制的單子實際上是相當 限制和排除很多單子成語。我猜想 實施方法是一般的,任何受限制的monad可以變成通常的一個,而不會損失效率。所以,看起來似乎是 ,我們根本不需要限制單子。

+0

我實際上已經使用了高效Set monad背後的想法來構建一個有效的概率分佈monad(請參閱https://github.com/chris-taylor/hs-probability/blob/master/src/Control/Probability/Bayes.hs ) .. 那謝謝啦!我沒有想過爲其他受限制的單子做同樣的事情,但我無法立即看到爲什麼它不起作用的原因。 – 2013-07-26 06:39:23