[Haskell-beginners] Filtering lists

Stephen Tetley stephen.tetley at gmail.com
Tue Feb 9 07:27:50 EST 2010


Hello

If you have a list of String for each record, use partition from
Data.List, e.g.:


import Data.List ( partition )

partitionBySize :: [[String]] -> ([[String]],[[String]])
partitionBySize = partition (\xs -> length xs < 10)

-- for demo-ing:

printShortsLongs ::  ([[String]],[[String]]) -> IO ()
printShortsLongs (xs,ys) = do
  putStrLn "Shorts:"
  mapM_ print xs
  putStrLn "Longs:"
  mapM_ print ys

demo1 = printShortsLongs $ partitionBySize [
    ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ]
  , ["1", "2", "3", "4"]
  , ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ]
  , ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ]
  , ["1", "2", "3", "4"]
  ]



On 9 February 2010 10:53,  <legajid at free.fr> wrote:
> Hi,
> i get a .csv file with two different record formats (too bad).
> The first one, identified by a "A" in the second field, contains 4 fields.
> The second one, identified by a "B", contains 10 fields.
>
> In order to put them in lists, i use lines then break to get a list of lists.
> Then i want to filter this list, one for the A list, the other one for the B list.
> Unfortunately, the  pattern for the A type contains 4 fields; when a type B list occurs (10 fields), i get a message concerning the pattern : Non-exhaustive patterns in lambda
>
> How can i separate the two record formats?
>
> Thanks,
> Didier
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>


More information about the Beginners mailing list