Denis' version doesn't work for names containing hyphens or apostrophes. The original works for both.... However, the original explicitly assumes there are always at least two names and gives erroneous data if there are more than two. Output below shows the failure on hyphenated names. Prelude Data.Char Control.Monad.Reader> unwords $ words $ takeWhile isAlphaOrSpace $ dropWhile (not . isAlpha) $ " \" John Doe \" " "John Doe" Prelude Data.Char Control.Monad.Reader> unwords $ words $ takeWhile isAlphaOrSpace $ dropWhile (not . isAlpha) $ " \" John Doe-Smith \" " "John Doe" Tim Perry (916) 505-3634 On Thu, Jun 6, 2013 at 4:06 PM, Denis Kasak <denis.kasak@gmail.com> wrote:
On 7 June 2013 00:36, Costello, Roger L. <costello@mitre.org> wrote:
Hi Folks,
I have a string that contains a person's name. [snip] Here is an example string:
s = " \" John Doe \" "
After processing, I should have:
John Doe
Below is my implementation. Is there is a shorter and more efficient implementation? [snip code]
How about this?
import Data.Char import Control.Monad.Reader
isAlphaOrSpace = liftM2 (||) isAlpha isSpace
-- alternatively, -- isAlphaOrSpace x = isAlpha x || isSpace x -- if you find this more readable
s = " \" John Doe \" "
fs = unwords . words . takeWhile isAlphaOrSpace . dropWhile (not . isAlpha) $ s
-- Denis Kasak
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners