[Haskell-cafe] remove Maybe

Bob Ippolito bob at redivi.com
Thu Jan 3 04:29:32 UTC 2019


One way to figure out how to solve this problem is to search Hoogle for the
type of function you’re looking for, in this case: [Maybe a] -> [a]

https://www.haskell.org/hoogle/?hoogle=%5BMaybe+a%5D+-%3E+a

You’ll find that such a function exists in Data.Maybe and it is named
catMaybes. No need to filter out Nothing separately, this function will do
it.

On Wed, Jan 2, 2019 at 20:08 Damien Mattei <damien.mattei at gmail.com> wrote:

> i had filtered a [Maybe Text] type to remove Nothing from the list and now
> i want to put the result in a [Text] type but the compiler complains about
> the incompatible type :
>
>  (bd_rows_WDS :: [Only (Maybe Text)]) <- query conn qry_head_WDS (Only
> (name::String))
>
> -- remove the records having N°BD NULL
>     let fltWDS :: [Only Text] = Prelude.filter (\(Only a) ->
>                                     case a of
>                                       Nothing -> False
>                                       Just a -> True)
>                  bd_rows_WDS
>
> Prelude> :load UpdateSidonie
> [1 of 1] Compiling Main             ( UpdateSidonie.hs, interpreted )
>
> UpdateSidonie.hs:282:33: error:
>     • Couldn't match type ‘Maybe Text’ with ‘Text’
>       Expected type: [Only Text]
>         Actual type: [Only (Maybe Text)]
>     • In the expression:
>         Prelude.filter
>           (\ (Only a)
>              -> case a of
>                   Nothing -> False
>                   Just a -> True)
>           bd_rows_WDS
>       In a pattern binding:
>         fltWDS :: [Only Text]
>           = Prelude.filter
>               (\ (Only a)
>                  -> case a of
>                       Nothing -> False
>                       Just a -> True)
>               bd_rows_WDS
>       In the expression:
>         do conn <- connect
>                      defaultConnectInfo
>                        {connectHost = "moita", connectUser = "mattei",
>                         connectPassword = "sidonie2", connectDatabase =
> "sidonie"}
>            (rows :: [(Text, Double)]) <- query_
>                                            conn
>                                            "SELECT Nom,distance FROM
> AngularDistance WHERE distance > 0.000278"
>            (names :: [Only Text]) <- query_
>                                        conn
>                                        "SELECT Nom FROM AngularDistance
> WHERE distance > 0.000278"
>            let resLstNames = Prelude.map fromOnly names
>            ....
>     |
> 282 |     let fltWDS :: [Only Text] = Prelude.filter (\(Only a) ->
>     |                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
> Failed, no modules loaded.
>
> how can id do the type conversion,now i'm sure there is no more Nothing
> values?
>
> _______________________________________________
> 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20190102/f2c51aa3/attachment.html>


More information about the Haskell-Cafe mailing list