Generate Reason types from Haskell.
Please see the README on GitHub at https://github.com/abarbu/reason-export#readme
Reason Export
Create Reason classes and JSON encoders/decoders from Haskell DataTypes. Originally build by converting elm-export to Reason.
More docs on Hackage.
Usage
If you're using this package you almost certainly want to use servant-reason as well. There are tests in both packages that show to use this library.
Usage is trivial, derive Generic
and ReasonType
.
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
module Db where
import Reason
import GHC.Generics
data Person = Person
{ id :: Int
, name :: Maybe String
} deriving (Show, Eq, Generic, ReasonType)
Then you can expose your API:
module Main where
import Data.Proxy
import Reason
import Data.Text hiding (intercalate, map)
import Db
main :: IO ()
main = do
let code = defReasonImports :
toReasonTypeSource (Proxy :: Proxy Person) :
toReasonDecoderSource (Proxy :: Proxy Person) :
writeFile "client/Types.re" $ intercalate "\n\n" $ map unpack code
That's about it. Just do this for every type that you want to expose. You can make encoders as well, and configure various settings. See Hackage.
Reason setup
The generated Reason code needs access to @glennsl/bs-json. Get the latest install instructions from there, but at the time of writing these were:
npm install --save @glennsl/bs-json
Then add @glennsl/bs-json
to bs-dependencies
in your bsconfig.json
:
{
...
"bs-dependencies": ["@glennsl/bs-json"]
}