Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Services code review 1 #22

Closed
wants to merge 44 commits into from
Closed

Services code review 1 #22

wants to merge 44 commits into from

Conversation

rgleichman
Copy link
Collaborator

I have been working on implementing services and thought it would be nice to get some feedback. This is still a work in progress, so this should not be merged.

Check out the new tests in Tests/MsgGen.hs, and Tests/ServiceClientTests/ServiceClientTest.hs (instructions in comments). Right now it can generate Haskell types for service messages (tested by MsgGen), and call ROS services without any error handling (tested by ServiceClientTest).

Service message generation is not yet integrated into the executable.

Service Haskell types are just like message types except that they are also instances of SrvInfo. The generated Haskell message type files should be the same as before except they might have an extra newline at the end.

Except for MsgGen, changes to existing code are minimal: there is some code extraction and changes suggested by hlint.

…n be generated simultaneously. The gen tests now pass, still need to update md5 specific tests.
…te (in progress), add add_two_ints_server.py as a local file for servicetest.
@rgleichman
Copy link
Collaborator Author

The Travis build fails since ServiceClientTest (servicetest test suite) needs manual set up.

@rgleichman
Copy link
Collaborator Author

Since making the pull request I have added error detection and exception handling to callService.

-- | The first argument is a path to the test directory
-- | The second argument is a list of paths to the message file
-- | The third argument is a list of paths to the golden Haskell file
-- | Precondition: cachePkg has been called
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Haddock syntax doesn't need the vertical bar character (|) on each line.

Perhaps we should deal with the requirement to call cachePkg ourselves by keeping a Set of cached packages, and calling cachePkg ourselves when loading a message definition from an uncached package.

@acowley
Copy link
Owner

acowley commented Oct 24, 2014

This is an outstanding job! It's really great that not only will this add a really useful feature, but I think it's forcing improvements through the existing code you've had to touch.

where
handler x = return . Left . MasterExcept $
"Could not look up service with master. Is the ROS master (roscore) running? Got exception: " ++ show x

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you replace return . left with throwError?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doing that results in a type error. Since handler returns an IO action, throwError expects an IOException. This is because in the MonadError class the error has a functional dependency on the monad returned by throwError.

Couldn't match type `GHC.IO.Exception.IOException'
              with `ServiceResponseExcept'
When using functional dependencies to combine
  Control.Monad.Error.Class.MonadError
    GHC.IO.Exception.IOException IO,
    arising from the dependency `m -> e'
    in the instance declaration in `Control.Monad.Error.Class'
  Control.Monad.Error.Class.MonadError ServiceResponseExcept IO,
    arising from a use of `handler'
    at /home/robbie/git/robbie/roshask/src/Ros/Graph/Master.hs:55:55-61
In the second argument of `flip', namely `handler'
In the second argument of `(.)', namely
  `(flip catchIOError) handler'

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, good point! I had looked at the docs but read right over the fundep.

@rgleichman
Copy link
Collaborator Author

The previous two commits should address the remaining comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants