Re: Is there a way to make this code compose generic ?

PICCA Frederic-Emmanuel <[email protected]>
Newsgroups gmane.comp.lang.haskell.cafe
Message-ID <1846636753.94661711.1744186984085.JavaMail.zimbra@synchrotron-soleil.fr>
Hello

Li-yao

thanks a lot for you explanations, it helps me a lot.

I end up with this error (beware the long error message...)

src/Hkl/Binoculars/Projections/Config/Sample.hs:68:14: error: [GHC-39999]
    • Could not deduce ‘Hkl.DataSource.GDataSourceAcq
                          (GHC.Generics.C1
                             (GHC.Generics.MetaCons
                                "DataSourceT'Sample" GHC.Generics.PrefixI False)
			    (((GHC.Generics.S1
                                  (GHC.Generics.MetaSel
                                     Nothing
                                     GHC.Generics.NoSourceUnpackedness
                                     GHC.Generics.NoSourceStrictness
                                     GHC.Generics.DecidedLazy)
                                  (GHC.Generics.Rec0 (DataSourceT DSAcq Double))
                                GHC.Generics.:*: GHC.Generics.S1
                                                   (GHC.Generics.MetaSel
                                                      Nothing
                                                      GHC.Generics.NoSourceUnpackedness
                                                      GHC.Generics.NoSourceStrictness
                                                      GHC.Generics.DecidedLazy)
                                                   (GHC.Generics.Rec0 (DataSourceT DSAcq Double)))
                               GHC.Generics.:*: (GHC.Generics.S1
                                                   (GHC.Generics.MetaSel
                                                      Nothing
                                                      GHC.Generics.NoSourceUnpackedness
                                                      GHC.Generics.NoSourceStrictness
                                                      GHC.Generics.DecidedLazy)
                                                   (GHC.Generics.Rec0 (DataSourceT DSAcq Double))
	                                        GHC.Generics.:*: GHC.Generics.S1
	                                                           (GHC.Generics.MetaSel
	                                                              Nothing
                                                                       GHC.Generics.NoSourceUnpackedness
                                                                       GHC.Generics.NoSourceStrictness
                                                                       GHC.Generics.DecidedLazy)
                                                                    (GHC.Generics.Rec0
                                                                       (DataSourceT DSAcq Degree))))
                              GHC.Generics.:*: ((GHC.Generics.S1
	                                          (GHC.Generics.MetaSel
	                                             Nothing
                                                      GHC.Generics.NoSourceUnpackedness
                                                      GHC.Generics.NoSourceStrictness
                                                      GHC.Generics.DecidedLazy)
                                                   (GHC.Generics.Rec0 (DataSourceT DSAcq Degree))
	                                        GHC.Generics.:*: GHC.Generics.S1
                                                                    (GHC.Generics.MetaSel
                                                                       Nothing
                                                                       GHC.Generics.NoSourceUnpackedness
                                                                       GHC.Generics.NoSourceStrictness
                                                                       GHC.Generics.DecidedLazy)
                                                                    (GHC.Generics.Rec0
                                                                       (DataSourceT DSAcq Degree)))
                                                GHC.Generics.:*: (GHC.Generics.S1
                                                                    (GHC.Generics.MetaSel
                                                                       Nothing
                                                                       GHC.Generics.NoSourceUnpackedness
                                                                       GHC.Generics.NoSourceStrictness
                                                                       GHC.Generics.DecidedLazy)
                                                                    (GHC.Generics.Rec0
                                                                       (DataSourceT DSAcq Degree))
                                                                  GHC.Generics.:*: (GHC.Generics.S1
                                                                                      (GHC.Generics.MetaSel
                                                                                          GHC.Generics.NoSourceUnpackedness
                                                                                         GHC.Generics.NoSourceStrictness
                                                                                         GHC.Generics.DecidedLazy)
                                                                                      (GHC.Generics.Rec0
                                                                                         (DataSourceT
                                                                                            DSAcq
                                                                                            Degree))
                                                                                    GHC.Generics.:*: GHC.Generics.S1
                                                                                                       (GHC.Generics.MetaSel
                                                                                                          Nothing
                                                                                                          GHC.Generics.NoSourceUnpackedness
                                                                                                          GHC.Generics.NoSourceStrictness
                                                                                                          GHC.Generics.DecidedLazy)
                                                                                                       (GHC.Generics.Rec0
                                                                                                          (DataSourceT
                                                                                                             DSAcq
                                                                                                             Degree))))))
                           GHC.Generics.:+: GHC.Generics.C1
                                              (GHC.Generics.MetaCons
                                                 "DataSourceT'Sample'Or" GHC.Generics.PrefixI False)
                                              (GHC.Generics.S1
                                                 (GHC.Generics.MetaSel
                                                    Nothing
                                                    GHC.Generics.NoSourceUnpackedness
                                                    GHC.Generics.NoSourceStrictness
                                                    GHC.Generics.DecidedLazy)
                                                 (GHC.Generics.Rec0 (DataSourceT DSAcq Sample))
                                               GHC.Generics.:*: GHC.Generics.S1
                                                                  (GHC.Generics.MetaSel
                                                                     Nothing
                                                                     GHC.Generics.NoSourceUnpackedness
                                                                     GHC.Generics.NoSourceStrictness
                                                                     GHC.Generics.DecidedLazy)
                                                                  (GHC.Generics.Rec0
                                                                     (DataSourceT DSAcq Sample))))’
                                                                                         Nothing

        arising from a use of ‘generic'ds'Shape’
      from the context: Pipes.Safe.MonadSafe m
        bound by the type signature for:
                   ds'Shape :: forall (m :: * -> *).
                               Pipes.Safe.MonadSafe m =>
                               DataSourceT DSAcq Sample -> m DataSourceShape
        at src/Hkl/Binoculars/Projections/Config/Sample.hs:68:3-10
    • In the expression: generic'ds'Shape
      In an equation for ‘ds'Shape’: ds'Shape = generic'ds'Shape
      In the instance declaration for ‘DataSource Sample’
   |
68 |   ds'Shape = generic'ds'Shape
   |              ^^^^^^^^^^^^^^^^



It works great if I have this type.

instance DataSource Sample where
  data DataSourceT k Sample
    = DataSourceT'Sample
      (DataSourceT k Double) -- a                                                                                                                                                                                                                                                       
      (DataSourceT k Double) -- b                                                                                                                                                                                                                                                       
      (DataSourceT k Double) -- c                                                                                                                                                                                                                                                       
      (DataSourceT k Degree) -- alpha                                                                                                                                                                                                                                                   
      (DataSourceT k Degree) -- beta                                                                                                                                                                                                                                                    
      (DataSourceT k Degree) -- gamma                                                                                                                                                                                                                                                   
      (DataSourceT k Degree) -- ux                                                                                                                                                                                                                                                      
      (DataSourceT k Degree) -- uy                                                                                                                                                                                                                                                      
      (DataSourceT k Degree) -- uz                                                                                                                                                                                                                                                      
    deriving (Generic)

  ds'Shape = generic'ds'Shape


but not If I need to add this other constructor

    | DataSourceT'Sample'Or (DataSourceT k Sample) (DataSourceT k Sample)

is it connected to this ?

                           GHC.Generics.:+: GHC.Generics.C1


There is no instance for :+: in your proposition.

These `Or` Constructor are usefull with the default withDatasourcePOr of the cladd DataSource , it is a sort of fallback.

try the first and if something goes wrong try the second one.

  withDataSourcePOr ∷ (Location l, MonadSafe m)
                    ⇒ ScanFile l → DataSourceT DSPath a → DataSourceT DSPath a → (DataSourceT DSAcq a → m r) → m r
  withDataSourcePOr f l r g = withDataSourceP f l g
                              `catch`
                              λexl → withDataSourceP f r g
                                     `catch`
                                     λexr → throwM $ CanNotOpenDataSource'Or exl exr


This is how I define the fallback when declaring the instance from this Or constructor

  withDataSourceP f (DataSourcePath'Sample'Or l r) g = withDataSourcePOr f l r g                                                                                                                                                                                                     

I don ot know if this is the right design...

thanks

Fred
_______________________________________________
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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.