Hello,<br><br>Isaac, this works for me.<br><br>Thx a lot,<br><br>Steffen<br><br><br><br><br><br><div><span class="gmail_quote">2007/12/5, Isaac Dupree &lt;<a href="mailto:isaacdupree@charter.net">isaacdupree@charter.net</a>
&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Steffen Mazanek wrote:<br>&gt; Hi,<br>&gt;<br>&gt; Stefan and Isaac, thx for providing quick advice.
<br>&gt;<br>&gt; @Stefan: Unfortunately I have to use a list.<br>&gt; @Isaac: I do not get it. Could you please provide a short example of your<br>&gt; approach?<br>&gt;<br>&gt; The question still remains. Which arguments do I have ghc to start with to
<br>&gt; get the same behavior than hugs with -98 +o (here it works).<br>&gt;<br>&gt; I provide my example for testing purposes:<br>&gt;<br>&gt; module Test where<br>&gt; import Test.QuickCheck<br>&gt; import Monad(liftM,liftM2)
<br>&gt;<br>&gt; type Program = [Stmt]<br>&gt; data Stmt = Text | IfElse Program Program | While Program deriving (Eq,<br>&gt; Show)<br>&gt;<br>&gt; instance Arbitrary [Stmt] where<br>&gt;&nbsp;&nbsp; arbitrary = sized genProg<br>&gt; instance Arbitrary Stmt where
<br>&gt;&nbsp;&nbsp; arbitrary = sized genStmt<br>&gt;<br>&gt; genStmt::Int-&gt;Gen Stmt<br>&gt; genStmt 0 = return Text<br>&gt; genStmt 1 = return Text<br>&gt; genStmt 2 = oneof [return Text, return (While [Text])]<br>&gt; genStmt n | n&gt;2 = oneof ([return Text,
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liftM While (genProg (n-1))]++<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[liftM2 IfElse (genProg k) (genProg<br>&gt; (n-k-1))|k&lt;-[1..n-2]])<br>&gt;<br>&gt; genProg::Int-&gt;Gen Program<br>&gt; genProg 0 = return []
<br>&gt; genProg 1 = return [Text]<br>&gt; genProg n | n&gt;1 = oneof ((liftM (\x-&gt;[x]) (genStmt n)):[liftM2 (:) (genStmt<br>&gt; k) (genProg (n-k))|k&lt;-[1..n-1]])<br>&gt;<br>&gt; prop_ConstructParse progr = True<br>
&gt;&nbsp;&nbsp; where types = progr::Program<br>&gt;<br>&gt; main = mapM_ (\(s,a) -&gt; putStrLn s &gt;&gt; a) [(&quot;flowchart construct and parse&quot;,<br>&gt; test prop_ConstructParse)]<br><br>is prop_ConstructParse the only thing that breaks when you remove the
<br>instance Arbitrary [Stmt] where arbitrary = sized genProg, or have I<br>missed something?&nbsp;&nbsp;If that&#39;s all, try this (untested) :<br><br>prop_ConstructParse = forAll (sized genProg) (\progr -&gt; True)<br><br>and similarly for other properties.
<br><br>Or, you _can_ use a newtype for quickcheck-only, something like this:<br><br>newtype P = P { unP :: Program }<br>instance Show P where show = show . unP<br>instance Arbitrary P where arbitrary = sized genProg . unP
<br>prop_ConstructParse (P progr) = True<br><br><br>Isaac<br></blockquote></div><br><br clear="all"><br>-- <br>Dipl.-Inform. Steffen Mazanek<br>Institut für Softwaretechnologie<br>Fakultät Informatik<br><br>Universität der Bundeswehr München
<br>85577 Neubiberg<br><br>Tel: +49 (0)89 6004-2505<br>Fax: +49 (0)89 6004-4447<br><br>E-Mail: <a href="mailto:steffen.mazanek@unibw.de">steffen.mazanek@unibw.de</a>