Please see the README on GitHub at

mit, web, Propose Tags , Reason, elm-export, Hackage, servant-reason, @glennsl/bs-json, haskell, reasonml, servant
cabal install reason-export


Reason Export

Build Status reason reason

Create Reason classes and JSON encoders/decoders from Haskell DataTypes. Originally build by converting elm-export to Reason.

More docs on Hackage.


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/" $ 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"]