{-# LANGUAGE FlexibleInstances #-}
module Data.Schema where

import           Data.Proxy (Proxy)


data Field = Field
  { fieldName :: String
  , fieldType :: Type
  }
  deriving (Eq, Show, Read)

data Schema
  = SchemaRecord [Field]
  | SchemaInt
  | SchemaDouble
  | SchemaString
  deriving (Eq, Show, Read)


data Type = Type
  { typeName   :: String
  , typeSchema :: Schema
  }
  deriving (Eq, Show, Read)


class HasSchema a where
  schema :: Proxy a -> Type


instance HasSchema Schema where
  schema = error "TODO(robinlinden): define schema for Schema"


instance HasSchema Int where
  schema _ = Type "Int" SchemaInt

instance HasSchema Double where
  schema _ = Type "Double" SchemaDouble

instance HasSchema String where
  schema _ = Type "String" SchemaString