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