You have implemented very general idea as <br>a part of your library (Data type a la carte). <br>Maybe it&#39;s better to make a separate package?<br>Other developers would benefit from it. I saw some other<br>packages and they implement it too. <br>
†<br><br>Anton<br><br><br><div class="gmail_quote">2012/7/1 Liam O&#39;Connor <span dir="ltr">&lt;<a href="mailto:liamoc@cse.unsw.edu.au" target="_blank">liamoc@cse.unsw.edu.au</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I know it&#39;s somewhat evil (:P), but I was unable to implement the subsumption constraints (:&lt;:) in a way that avoided it. It&#39;s there because I&#39;m (ab)using the type-class system to do computation (specifically an O(n) search though long chain of coproducts for a specific constructor). E.g, determining Foo :&lt;: Bar :+: Foo :+: Baz. There may be a way to rearrange the type level stuff to make it go away, perhaps with some new type extensions in 7.4 that I haven&#39;t studied extensively yet.<br>

<br>
This is also a problem in Swierstra&#39;s original paper where he introduces this technique. In practice, it doesn&#39;t pose a problem, because you&#39;re not meant to define your own instances of :&lt;: anyway, and you shouldn&#39;t care what order the constructors occur.<br>

<br>
Regards,<br>
Liam O&#39;Connor<br>
<div class="im"><br>
<br>
On Sunday, 1 July 2012 at 6:37 PM, Krzysztof SkrzÍtnicki wrote:<br>
<br>
&gt; Hello,<br>
&gt;<br>
&gt; This library looks very nice. Thank you for realeasing it! I realise it took quite an effort to write it.<br>
&gt;<br>
&gt; Looking from examples on Github I noticed that you use -XOverlappingInstances. Why do you need such extension?<br>
&gt;<br>
&gt; Best regards,<br>
&gt; Krzysztof SkrzÍtnicki<br>
&gt;<br>
</div><div class="im">&gt; On Sun, Jul 1, 2012 at 10:17 AM, Liam O&#39;Connor &lt;<a href="mailto:liamoc@cse.unsw.edu.au">liamoc@cse.unsw.edu.au</a> (mailto:<a href="mailto:liamoc@cse.unsw.edu.au">liamoc@cse.unsw.edu.au</a>)&gt; wrote:<br>

&gt; &gt; Hi all,<br>
&gt; &gt;<br>
&gt; &gt; wizards is an Haskell library designed for the quick and painless development of interrogative programs, which revolve around a &quot;dialogue&quot; with the user, who is asked a series of questions in a sequence much like an installation wizard.<br>

&gt; &gt;<br>
&gt; &gt; Everything from interactive system scripts, to installation wizards, to full-blown shells can be implemented with the support of wizards.<br>
&gt; &gt;<br>
</div>&gt; &gt; It is developed transparently on top of a free monad (see Swierstra&#39;s excellent paper on this topic at <a href="http://www.cs.ru.nl/%7EW.Swierstra/Publications/DataTypesALaCarte.pdf" target="_blank">http://www.cs.ru.nl/~W.Swierstra/Publications/DataTypesALaCarte.pdf</a> (<a href="http://www.cs.ru.nl/%7EW.Swierstra/Publications/DataTypesALaCarte.pdf%29" target="_blank">http://www.cs.ru.nl/%7EW.Swierstra/Publications/DataTypesALaCarte.pdf)</a>), which separates out the semantics of the program from the wizards interface. A variety of backends exist, including a full featured backend for Haskeline, a debug-friendly simpler implementation in terms of System.IO primitives, and a completely pure implementation modelled as a function from an input string to output. It is also possible to write your own backends, or extend the existing back-ends with new features.<br>

<div class="im">&gt; &gt;<br>
&gt; &gt; While both built-in IO backends operate on a console, there is no reason why wizards cannot also be used for making GUI wizard interfaces.<br>
&gt; &gt;<br>
&gt; &gt; The library is highly extensible - back-ends can be written or extended with the type system helpfully tracking what features are supported by which back-ends.<br>
&gt; &gt;<br>
&gt; &gt; Installation instructions and some educational examples are at the github page:<br>
&gt; &gt;<br>
&gt; &gt; <a href="https://github.com/liamoc/wizards" target="_blank">https://github.com/liamoc/wizards</a><br>
&gt; &gt;<br>
&gt; &gt; Information on how to write backends or extend backends, as well as structured API documentation is available on Hackage:<br>
&gt; &gt;<br>
&gt; &gt; <a href="http://hackage.haskell.org/package/wizards" target="_blank">http://hackage.haskell.org/package/wizards</a><br>
&gt; &gt;<br>
&gt; &gt; (Or, you can just run cabal haddock to generate the documentation from the source).<br>
&gt; &gt;<br>
&gt; &gt; Regards,<br>
&gt; &gt; Liam O&#39;Connor<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Haskell-Cafe mailing list<br>
</div>&gt; &gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a> (mailto:<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a>)<br>
&gt; &gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<div class="HOEnZb"><div class="h5">&gt;<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br>