Можно ли в общем случае реализовать оператор amb в D?

Можно ли в общем случае реализовать оператор amb в D?

http://www.haskell.org/haskellwiki/Amb
http://www.randomhacks.net/articles/2005/10/11/amb-operator

Сорт [1193330 Я думаю о следующем:

amb([1, 2]) * amb([3, 4, 5]) == amb([3, 4, 5, 6, 8, 10])
amb(["hello", "world"]) ~ amb(["qwerty"]) == amb(["helloqwerty", "worldqwerty"])
amb(["hello", "world"]) ~ "qwerty" == amb(["helloqwerty", "worldqwerty"])
amb(["hello", "very long string"]).length = amb([5, 16])

В последних двух примерах действительно необходимо «поднять» ~ и длину в «контекст» amb (монаду?). В первых двух примерах операторы должны быть просто применены к содержимому окружения.

Я сделал небольшую попытку, но у меня возникли проблемы при попытке поднять операторы / методы / свойства упакованного типа (* , ~ и .length в этом примере). Как это должно быть сделано в D?

Спасибо,

Крис.

10
задан Peter Alexander 1 September 2010 в 06:59
поделиться