rover :: ComponentInstance
rover = ComponentInstance r (CompositeComponent nameRover sig cs inb exb)
 where
  m2a   = mkMessage "m2a" "{data:RawPicture}"
  m2b   = mkMessage "m2b" "{data:RawVideo}"
  store = mkOperation "store"
  sig   = Signature
    [run]
    [getPic, getVid]
    (fromList [(run, m1), (getPic, m1), (getVid, m1)])
    (fromList [(run, Nothing), (getPic, Just m2a), (getVid, Just m2b)])
  cs = [controllerUnit, acquisitionUnit, storeUnit]
  inb =
    [ n1 @: c # askPic --> a # askPic
    , n2 @: c # askVid --> a # askVid
    , n3 @: a # storePic --> s # storePic
    , n4 @: a # storeVid --> s # storeVid
    ]
  exb =
    [ n5 @: self # run ==> c # run
    , n6 @: a # getPic ==> self # getPic
    , n7 @: a # getVid ==> self # getVid
    ]

--
-- helpers (to be moved to VECA DSL if useful)
--
rover :: ComponentInstance
rover = ComponentInstance r (CompositeComponent nameRover sig cs inb exb)
 where
  m2a   = mkMessage "m2a" "{data:RawPicture}"
  m2b   = mkMessage "m2b" "{data:RawVideo}"
  store = mkOperation "store"
  sig   = Signature
    [run]
    [getPic, getVid]
    (fromList [(run, m1), (getPic, m1), (getVid, m1)])
    (fromList [(run, Nothing), (getPic, Just m2a), (getVid, Just m2b)])
  cs = [controllerUnit, acquisitionUnit, storeUnit]
  inb =
    [ n1 @: c # askPic --> a # askPic
    , n2 @: c # askVid --> a # askVid
    , n3 @: a # storePic --> s # storePic
    , n4 @: a # storeVid --> s # storeVid
    ]
  exb =
    [ n5 @: self # run ==> c # run
    , n6 @: a # getPic ==> self # getPic
    , n7 @: a # getVid ==> self # getVid
    ]

--
-- helpers (to be moved to VECA DSL if useful)
--
rover = ComponentInstance r (CompositeComponent nameRover sig cs inb exb)
 where
  m2a   = mkMessage "m2a" "{data:RawPicture}"
  m2b   = mkMessage "m2b" "{data:RawVideo}"
  store = mkOperation "store"
  sig   = Signature
    [run]
    [getPic, getVid]
    (fromList [(run, m1), (getPic, m1), (getVid, m1)])
    (fromList [(run, Nothing), (getPic, Just m2a), (getVid, Just m2b)])
  cs = [controllerUnit, acquisitionUnit, storeUnit]
  inb =
    [ n1 @: c # askPic --> a # askPic
    , n2 @: c # askVid --> a # askVid
    , n3 @: a # storePic --> s # storePic
    , n4 @: a # storeVid --> s # storeVid
    ]
  exb =
    [ n5 @: self # run ==> c # run
    , n6 @: a # getPic ==> self # getPic
    , n7 @: a # getVid ==> self # getVid
    ]

--
-- helpers (to be moved to VECA DSL if useful)
--