Popularity
4.6
Declining
Activity
0.0
Stable
8
4
0

Monthly Downloads: 10
Programming language: Haskell
License: MIT License
Tags: Web    
Latest version: v0.1.2.0

reason-export alternatives and similar packages

Based on the "Web" category.
Alternatively, view reason-export alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of reason-export or a related project?

Add another 'Web' Package

README

Reason Export

Build Status

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