| Haskell Thrift Bindings |
| |
| Running |
| ======= |
| |
| You need -fglasgow-exts. Use Cabal to compile and install. If you're trying to |
| manually compile or load via ghci, and you're using ghc 6.10 (or really if your |
| default base package has major version number 4), you must specify a version of |
| the base package with major version number 3. Furthermore if you have the syb |
| package installed you need to hide that package to avoid import conflicts. |
| Here's an example of what I'm talking about: |
| |
| ghci -fglasgow-exts -package base-3.0.3.0 -hide-package syb -isrc Thrift.hs |
| |
| To determine which versions of the base package you have installed use the |
| following command: |
| |
| ghc-pkg list base |
| |
| All of this is taken care of for you if you use Cabal. |
| |
| |
| Enums |
| ===== |
| |
| become haskell data types. Use fromEnum to get out the int value. |
| |
| Structs |
| ======= |
| |
| become records. Field labels are ugly, of the form f_STRUCTNAME_FIELDNAME. All |
| fields are Maybe types. |
| |
| Exceptions |
| ========== |
| |
| identical to structs. Throw them with throwDyn. Catch them with catchDyn. |
| |
| Client |
| ====== |
| |
| just a bunch of functions. You may have to import a bunch of client files to |
| deal with inheritance. |
| |
| Interface |
| ========= |
| |
| You should only have to import the last one in the chain of inheritors. To make |
| an interface, declare a label: |
| |
| data MyIface = MyIface |
| |
| and then declare it an instance of each iface class, starting with the superest |
| class and proceding down (all the while defining the methods). Then pass your |
| label to process as the handler. |
| |
| Processor |
| ========= |
| |
| Just a function that takes a handler label, protocols. It calls the |
| superclasses process if there is a superclass. |
| |