content: module Serialization where
  
  import FFI
  
  data Parametric a = Parametric a
  data ConcreteRecord = ConcreteRecord { concreteField :: Double }
  main = do
    printParametricButConcreteType (Parametric (ConcreteRecord 123))
    printParametricButAutomaticType (Parametric (ConcreteRecord 123))
    printParametricType (Parametric (ConcreteRecord 123))
    printMaybeConcrete (Just (ConcreteRecord 42))
    printMaybeAutomatic (Just (ConcreteRecord 42))
    printMaybe (Just (ConcreteRecord 42))
    printUnknown 42
    printUnknownField (Just 42)
    printAutomatic (Just (ConcreteRecord 42))
  
  printParametricButConcreteType :: Parametric ConcreteRecord -> Fay ()
  printParametricButConcreteType = ffi "console.log(%1)"
  
  printParametricButAutomaticType :: Parametric (Automatic a) -> Fay ()
  printParametricButAutomaticType = ffi "console.log(%1)"
  
  printParametricType :: Parametric a -> Fay ()
  printParametricType = ffi "console.log(%1)"
  
  printMaybeConcrete :: Maybe ConcreteRecord -> Fay ()
  printMaybeConcrete = ffi "console.log(%1)"
  
  printMaybeAutomatic :: Maybe (Automatic a) -> Fay ()
  printMaybeAutomatic = ffi "console.log(%1)"
  
  printMaybe :: Maybe a -> Fay ()
  printMaybe = ffi "console.log(%1)"
  
  printUnknown :: a -> Fay ()
  printUnknown = ffi "console.log(%1)"
  
  printUnknownField :: Maybe a -> Fay ()
  printUnknownField = ffi "console.log(%1)"
  
  printAutomatic :: Automatic a -> Fay ()
  printAutomatic = ffi "console.log(%1)"
  