Hello,

I am working on making a property to setup a CMS, involving configuration with passwrod...

I have a first property installing the required packages with signature :

wp_pkgs :: Property Debian

I have made a second property to store the password/priv data to the 'proper file' which has signature (the data is stored in the privData with context the hostname and field the 'DbId')

type DbId = String
wp_dbconf ::  HostName -> DbId -> Property (Debian + HasInfo)

I now want to combine those properties to make a single entry point using the following code :

wordpressSite :: HostName -> DbId -> Property (Debian + HasInfo)
wordpressSite hn id = desc ==> wp_conf hn id
  where
    desc :: String
    desc = ("Installing and configuring WordPress to answer at name " ++ hn)

    wp_conf :: HostName -> DbId -> Property (Debian + HasInfo)
    wp_conf hn id =
      wp_pkgs
     `before` wp_dbconf hn id

which gives me this error :

/src/Propellor/Property/SiteSpecific/IPANEMA.hs:221:7: error:
    • Couldn't match type ‘'Propellor.Types.MetaTypes.Targeting
                             'OSDebian’
                     with ‘'Propellor.Types.MetaTypes.WithInfo’
      Expected type: Property (Debian + HasInfo)
        Actual type: CombinedType
                       (Property Debian)
                       (Property
                          (Propellor.Types.MetaTypes.MetaTypes
                             '['Propellor.Types.MetaTypes.Targeting 'OSDebian,
                               'Propellor.Types.MetaTypes.WithInfo]))
    • In the expression: wp_pkgs `before` wp_dbconf hn id
      In an equation for ‘wp_conf’:
          wp_conf hn id = wp_pkgs `before` wp_dbconf hn id
      In an equation for ‘wordpressSite’:
          wordpressSite hn id
            = desc ==> wp_conf hn id
            where
                desc :: String
                desc
                  = ("Installing and configuring WordPress to answer at name " ++ hn)
                wp_conf :: HostName -> DbId -> Property (Debian + HasInfo)
                wp_conf hn id = wp_pkgs `before` wp_dbconf hn id
    |
221 |       wp_pkgs
    |       ^^^^^^^...

I understand that before is not happy having different types of Property on both sides.

I then tried also using props (with or without embedding it within a propertyList). Here is the version with propertyList

  wp_conf hn id =
  propertyList "Setting up a wordpress site" $ props
     & wp_pkgs
     & wp_dbconf hn id

Which also complains that I am trying to combine Debian with (Debian + HasInfo) (or at least that is how I understand the error message) :

src/Propellor/Property/SiteSpecific/IPANEMA.hs:221:52: error:
    • Couldn't match type ‘'Propellor.Types.MetaTypes.Targeting
                             'OSDebian’
                     with ‘'Propellor.Types.MetaTypes.WithInfo’
      Expected type: Props
                       (Propellor.Types.MetaTypes.MetaTypes
                          '['Propellor.Types.MetaTypes.Targeting 'OSDebian,
                            'Propellor.Types.MetaTypes.WithInfo])
        Actual type: Props
                       (Propellor.Types.MetaTypes.MetaTypes
                          (Propellor.Types.MetaTypes.Combine
                             '['Propellor.Types.MetaTypes.Targeting 'OSDebian]
                             '['Propellor.Types.MetaTypes.Targeting 'OSDebian,
                               'Propellor.Types.MetaTypes.WithInfo]))
    • In the second argument of ‘($)’, namely
        ‘props & wp_pkgs & wp_dbconf hn id’
      In the expression:
        propertyList "Setting up a wordpress site"
          $ props & wp_pkgs & wp_dbconf hn id
      In an equation for ‘wp_conf’:
          wp_conf hn id
            = propertyList "Setting up a wordpress site"
                $ props & wp_pkgs & wp_dbconf hn id
    |
221 |       propertyList "Setting up a wordpress site" $ props
    |                                                    ^^^^^...

I guess that is a regular pattern (mixing few properties with HasInfo with other that do not HasInfo) but all the code that I am looking at seems to work with props or some before or require combination.

I don't understand what I am doing wrong here.