yes both works, code looks like this now:
-- remove the records having N°BD NULL

    let fltWDS  = Prelude.filter (\(Only a) ->
                                               case a of
                                                        Nothing -> False
                                                        Just a -> True)
                  bd_rows_WDS



--    let fltWDS = [a | Only (Just a) <- bd_rows_WDS]

--    let fltWDS = catMaybes (Prelude.map fromOnly bd_rows_WDS)


    putStr "bd_rows_WDS filtered fltWDS ="
    putStrLn $ show fltWDS

    let lg_fltWDS = Prelude.length fltWDS
    putStrLn ("lg_fltWDS = " ++ (show lg_fltWDS))


    let resBDtxt = if lg_fltWDS == 0
                   then
                         Nothing
                   else
                        if lg_fltWDS == 1
                        then 
                           --Just (Prelude.head fltWDS)
                           fromOnly (Prelude.head fltWDS)
                        else                    
                           --trace "WARNING: multiple BD in WDS result" (Just (Prelude.head fltWDS))
                           trace "WARNING: multiple BD in WDS result" fromOnly (Prelude.head fltWDS)

    putStr "resBDtxt ="
    putStrLn (maybe "Empty List" show resBDtxt)

i will keep a Maybe type because in fact there is a possibility of having no result or one (extract sometimes from many) from the databases, so there is a possibility for Nothing i must keep and handle for the next instructions...
thanks


On Thu, Jan 3, 2019 at 3:54 PM Neil Mayhew <neil_mayhew@users.sourceforge.net> wrote:
On 2019-01-03 12:43 AM, Ganesh Sittampalam wrote:
If you did have [Maybe Text] you could use the library function

  catMaybes :: [Maybe a] -> [a]

to both do the filtering and change the types.

...

But in your case you actually have [Only (Maybe Text)] rather than [Maybe Text] so catMaybes won't work. One option is to use a list comprehension instead:

let fltWDS = [Only a | Only (Just a) <- bd_rows_WDS]

It probably would be helpful to remove the Only wrapper at this stage, so this might be even better:

let fltWDS = [a | Only (Just a) <- bd_rows_WDS]

The way to do it with catMaybes would be to map with fromOnly first:

let fltWDS = catMaybes (map fromOnly bd_rows_WDS)

As Ganesh shows, there's no need for a type annotation after you've done the query, because the compiler can infer the type [Text] from the types of the functions that are used. The annotations are necessary with query only because it's polymorphic and can work with a wide variety of types.
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.