<div dir="ltr">First of all, sorry asking too many questions!<br><br>I am using the ICFP 2007 (<a href="http://save-endo.cs.uu.nl/">http://save-endo.cs.uu.nl/</a>) problem as a case for learning Haskell.<br><br>I started with the prototype, listed below<br>
<br><br>=================Main.hs=======================<br>module Main(main) where<br><br>import qualified Data.ByteString.Lazy.Char8 as L<br>import qualified Data.ByteString.Char8 as S<br><br>import Data.ByteString.Search.BoyerMoore as BM<br>
import Debug.Trace<br><br>data DNA=DNA {prefix :: L.ByteString, suffix :: L.ByteString}<br><br><br>main::IO ()<br>main=do<br>&nbsp;&nbsp;&nbsp; d&lt;-L.readFile &quot;endo.dna&quot;<br>&nbsp;&nbsp;&nbsp; let dna=DNA (L.pack &quot;IIIIIIIIIIICCICCICCICFFIIIIIIIIIIIIIIIICFP&quot;)&nbsp; d<br>
&nbsp;&nbsp;&nbsp; let pat=S.pack &quot;ICFP&quot;<br>&nbsp;&nbsp;&nbsp; print $ take 1 $ matchSL pat $ L.append (prefix dna) (suffix dna)<br clear="all">=================EOF Main.hs===================<br><br><br>My question is: <br><br>Knowing that the searched pattern is in DNA prefix, will &quot;suffix dna&quot; ever be called here? <br>
I mean, will the &quot;append&quot; suspension ever be fully evaluated?<br><br><br>I am thinking on using a data type like<br><br>data DNA=DNA {prefix::L.ByteString, worked::L.ByteString, suffix::ByteString}<br><br>The invariant is that worked should be L.empty whenever prefix is L.empty. <br>
<br><br>Thanks in advance<br><br>-- <br>Rafael Gustavo da Cunha Pereira Pinto<br>Electronic Engineer, MSc.<br>
</div>