MyNixOS website logo
Description

Generate Reason types from Haskell.

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

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.

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

Version

0.1.2.0

License

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows