[Haskell-cafe] An alternative break

2008-05-28 Thread Pieter Laeremans
Hello,

I need a break function that splits the list one element further than
the ordinary break.
This is the simplest solution I could imagine:

breakI :: (a - Bool) - [a] - ([a], [a])
breakI p s = case break p s of
   ([], []) - ([], [])
   (x, []) - (x, [])
   (x,  l)  -  (x ++ [head l], tail l )

Is there a better way to write this ?

thanks in advance,

Pieter

-- 
Pieter Laeremans [EMAIL PROTECTED]
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] An alternative break

2008-05-28 Thread Philip Weaver
On Wed, May 28, 2008 at 2:53 PM, Pieter Laeremans [EMAIL PROTECTED] wrote:
 Hello,

 I need a break function that splits the list one element further than
 the ordinary break.
 This is the simplest solution I could imagine:

 breakI :: (a - Bool) - [a] - ([a], [a])
 breakI p s = case break p s of
   ([], []) - ([], [])
   (x, []) - (x, [])
   (x,  l)  -  (x ++ [head l], tail l )

 Is there a better way to write this ?

Your first two cases are redundant; you can eliminate the first one.
Other than that, it looks fine.

 thanks in advance,

 Pieter

 --
 Pieter Laeremans [EMAIL PROTECTED]
 ___
 Haskell-Cafe mailing list
 Haskell-Cafe@haskell.org
 http://www.haskell.org/mailman/listinfo/haskell-cafe

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] An alternative break

2008-05-28 Thread Joachim Breitner
Hi,

Am Mittwoch, den 28.05.2008, 23:53 +0200 schrieb Pieter Laeremans:
 Hello,
 
 I need a break function that splits the list one element further than
 the ordinary break.
 This is the simplest solution I could imagine:
 
 breakI :: (a - Bool) - [a] - ([a], [a])
 breakI p s = case break p s of
([], []) - ([], [])
(x, []) - (x, [])
(x,  l)  -  (x ++ [head l], tail l )
 
 Is there a better way to write this ?

appending an element to a list is expensive, so if this is a problem you
can try this:

breakI _ [] =  ([], [])
breakI p (x:xs')
   | p x=  ([x],xs')
   | otherwise  =  let (ys,zs) = breakI p xs' in (x:ys,zs)

It is basically the Prelude.break from
http://haskell.org/ghc/docs/latest/html/libraries/base/src/GHC-List.html#break
with the forth line (with p x) changed.

Greetings,
Joachim

-- 
Joachim nomeata Breitner
  mail: [EMAIL PROTECTED] | ICQ# 74513189 | GPG-Key: 4743206C
  JID: [EMAIL PROTECTED] | http://www.joachim-breitner.de/
  Debian Developer: [EMAIL PROTECTED]


signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe