[Haskell-beginners] strange error inside a case

Sylvain Henry sylvain at haskus.fr
Fri Nov 29 11:29:23 UTC 2019


Hello,

What is the type of hdf2mergedcbf' ?

Does it work if you write `void (hdf2mergedcbf' (head masters) 1 1)` ?


On 29/11/2019 11:55, PICCA Frederic-Emmanuel wrote:
> Hello, I aheve some code whcih look like this
>
> thumbnail' :: (MonadIO m, MonadReader Beamline m, MonadThrow m) => ThumbnailInput -> m ()
> thumbnail' (ThumbnailInput col) = do
>    cwd <- toResultsPath "thumbnail" col
>    let shakeFiles' =  cwd </> $(mkRelDir ".shake/")
>    let shakeReport' = shakeFiles' </> $(mkRelFile "report.html")
>
>    liftIO $ shake shakeOptions{ shakeFiles=fromAbsDir shakeFiles'
>                               , shakeReport=[fromAbsFile shakeReport']
>                               , shakeVerbosity=Diagnostic
>                               } $ do
>      let uploaded = fromAbsFile $ cwd </> $(mkRelFile "thumbnail.uploaded")
>
>      want [uploaded]
>
>      -- (Rule 1) merge the image files
>      uploaded %> \_out -> do
>        -- need [xml]
>        masters <- liftIO $ expectedInputFiles col
>        liftIO $ hdf2mergedcbf' (head masters) 1 1
>        liftIO $ case col of
>          (SomeDataCollection SCollect SHdf5 _)          -> hdf2mergedcbf' (head masters) 1 1
>          (SomeDataCollection SCollect SHdf5' _)         -> undefined -- hdf2mergedcbf' (head masters) 1 1
>          (SomeDataCollection SCaracterization SHdf5 _)  -> undefined
>          (SomeDataCollection SCaracterization SHdf5' _) -> undefined
>          _                                              -> error "show not arrive here !!!"
>
>        -- hdf2mergedcbf
>        -- command [] "touch" [uploaded]
>        return ()
>
>
> When I try to compile it, it give me this error
>
>      • Couldn't match type ‘a0’ with ‘()’
>          ‘a0’ is untouchable
>            inside the constraints: f ~ 'ISPyB.DataCollection.Hdf5
>            bound by a pattern with constructor:
>                       SHdf5 :: SCollectSourceFormat 'ISPyB.DataCollection.Hdf5,
>                     in a case alternative
>            at src/Thumbnail.hs:180:38-42
>        Expected type: IO a0
>          Actual type: IO ()
>      • In the expression: hdf2mergedcbf' (head masters) 1 1
>        In a case alternative:
>            (SomeDataCollection SCollect SHdf5 _)
>              -> hdf2mergedcbf' (head masters) 1 1
>        In the second argument of ‘($)’, namely
>          ‘case col of
>             (SomeDataCollection SCollect SHdf5 _)
>               -> hdf2mergedcbf' (head masters) 1 1
>             (SomeDataCollection SCollect SHdf5' _) -> undefined
>             (SomeDataCollection SCaracterization SHdf5 _) -> undefined
>             (SomeDataCollection SCaracterization SHdf5' _) -> undefined
>             _ -> error "show not arrive here !!!"’
>      |
> 180 |         (SomeDataCollection SCollect SHdf5 _)          -> hdf2mergedcbf' (head masters) 1 1
>      |                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
>
> What I do not understand is how to fix this since it seems that
>
>    liftIO $ hdf2mergedcbf' (head masters) 1 1  works out of the case
>
> thanks for your help
>
> Frederic
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


More information about the Beginners mailing list