Hi folks, sorry for multiple copies of this email, but my mailserver had a 
problem and thought I am sending spam which is hopefully not true. 
Since I got a replay allready I modified my mail a bit.

I was wondering why we don't have an annotation or pragma for function to tell 
the compiler that we _need_ this particular recursive function to be unfolded. 
If the compiler cannot do this for some reason it should produce an error 
message to help you modifying your code. I have regularly problems that my 
code is either not strict enough or my functions are not unfolded. I find it 
annoying that this is a regular show stopper and consumes much time to fix. 
Here is an example: a search function for strings, which should return the 
index and the rest of the string after the first occurrence: search0 will not 
be unfolded by ghc -O even with {#- INLINE search0 -#} (I don't know why, it 
looks tail-recursive to me)
whereas search1 is just fine. 

search0 :: Int -> String -> String -> (String, Int)
search0 i [] _ = ([],i)
search0 i haystack needle = 
    let len = length needle
    in if isPrefixOf needle haystack then (drop len haystack, i+len)
       else search0 (seq i (i+1)) (drop 1 haystack) needle

search1 :: Int -> String -> String -> (String, Int)
search1 i [] _ = ([],i)
search1 i haystack needle = 
    let i = elemIndex True $ map (isPrefixOf needle) $ tails haystack
        len = length needle
    in case i of
         Just  index -> (drop (index+len) haystack, index + len)
         Nothing     -> ([],0)

Regards!
        Georg
-- 
---- Georg Martius,  Tel: +49 177 6413311  -----
------- http://www.flexman.homeip.net ----------

Attachment: pgpBBQgLBloc8.pgp
Description: PGP signature

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to