content: 
  module Fay.Types.FFI
    ( FundamentalType (..)
    , SerializeContext (..)
    ) where
  
  import qualified Fay.Exts.NoAnnotation as N
  
  -- | These are the data types that are serializable directly to native
  -- JS data types. Strings, floating points and arrays. The others are:
  -- actions in the JS monad, which are thunks that shouldn't be forced
  -- when serialized but wrapped up as JS zero-arg functions, and
  -- unknown types can't be converted but should at least be forced.
  data FundamentalType
     -- Recursive types.
   = FunctionType [FundamentalType]
   | JsType FundamentalType
   | ListType FundamentalType
   | TupleType [FundamentalType]
   | UserDefined N.Name [FundamentalType]
   | Defined FundamentalType
   | Nullable FundamentalType
   -- Simple types.
   | DateType
   | StringType
   | DoubleType
   | IntType
   | BoolType
   | PtrType
   --  Automatically serialize this type.
   | Automatic
   -- Unknown.
   | UnknownType
     deriving (Show)
  
  -- | The serialization context indicates whether we're currently
  -- serializing some value or a particular field in a user-defined data
  -- type.
  data SerializeContext = SerializeAnywhere | SerializeUserArg Int
    deriving (Eq, Read, Show)
  