reason-export: Generate Reason types from Haskell

[ library, mit, web ] [ Propose Tags ]

Please see the README on GitHub at https://github.com/abarbu/reason-export#readme


[Skip to Readme]
Versions [faq] 0.1.0.0, 0.1.1.0, 0.1.2.0
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), bytestring, containers, directory, formatting, hashable, mtl, text, time, wl-pprint-text [details]
License MIT
Copyright 2019 Andrei Barbu
Author Andrei Barbu
Maintainer andrei@0xab.com
Category Web
Home page https://github.com/abarbu/reason-export#readme
Bug tracker https://github.com/abarbu/reason-export/issues
Source repo head: git clone https://github.com/abarbu/reason-export
Uploaded by AndreiBarbu at Sat Jun 1 07:54:26 UTC 2019
Distributions NixOS:0.1.2.0
Downloads 224 total (62 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2019-06-01 [all 1 reports]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for reason-export-0.1.2.0

[back to package description]

Reason Export

Build Status <img src="https://cdn.svgporn.com/logos/reasonml.svg" alt="reason" height="20"/> <img src="https://www.haskell.org/img/haskell-logo.svg" alt="reason" height="20"/>

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"]
}