Damien Mattei
Damien Mattei

Reputation: 384

converting Maybe type1 in type1 after filtering

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?

Upvotes: 0

Views: 63

Answers (1)

talex
talex

Reputation: 20542

You can use catMaybes from Data.Maybe.

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

PS: It also filter out Nothing so you do't need to do it yourself.

Upvotes: 6

Related Questions