[ https://issues.apache.org/jira/browse/THRIFT-908?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13004703#comment-13004703 ]
Bryan Duxbury commented on THRIFT-908: -------------------------------------- Christian - Should we close this one "won't fix"? > Make required types actually required by the Haskell type system > ---------------------------------------------------------------- > > Key: THRIFT-908 > URL: https://issues.apache.org/jira/browse/THRIFT-908 > Project: Thrift > Issue Type: Bug > Components: Haskell - Compiler, Haskell - Library > Affects Versions: 0.6 > Environment: ghc 6.12.3 on Mac OS X 10.6 (Haskell Platform 2010.2) > Darwin -- 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; > root:xnu-1504.7.4~1/RELEASE_I386 i386 > The Glorious Glasgow Haskell Compilation System, version 6.12.3 > Reporter: Christian Lavoie > Assignee: Christian Lavoie > Fix For: 0.7 > > Attachments: v1-thrift-make-required-fields-required.patch > > Original Estimate: 6h > Remaining Estimate: 6h > > Currently Haskell bindings consider all struct fields to be optional by > having all struct fields be "Maybe $field". This patch removes that Maybe for > required fields. > THIS BREAKS EXISTING CODE. > It's also probably incomplete -- I haven't looked too carefully yet at what > happens on the server side if it tries to parse out an incomplete struct > definition: > {noformat} > struct myStruct { > 1: required byte foo, > } > {noformat} > became after some code changes > {noformat} > struct myStruct { > 1: optional byte foo, > } > {noformat} > And code generated for the first version is asked to read a struct from the > second version where foo is missing. > I suspect after this patch the Haskell server commits hara-kiri trying to > evaluate {{undefined}} _outside_ of the thrift generated code (so the client > could would receive an error for something that the thrift generated code > should have noticed as wrong). This is clearly inadequate. > Consider this bug a thought experiment / request for comments until I > validate that the patch is complete. It will still break existing code. > First and foremost: > # Thoughts? > # What would be an acceptable way to handle the case described above for > other Haskell users? Break the current interface some more by returning some > error type (Either $struct $errMessags?). Throw a Haskell exception? > # How do the other bindings handle parsing invalid data off the network? > # The generator and generated code is fairly painful to read. Would the > powers that be welcome a cleanup patch that moves as much of the > t_hs_generator.cpp code to a boost::format-style system that uses template > strings that look like Haskell code, and reformats the output to be indented, > proper style Haskell code as much as possible? -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira