{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FlexibleInstances #-}

module Data.Type.Internal.Instances where

import qualified Data.Bool
import qualified Data.Char
import qualified Data.Int
import qualified Data.Word
import qualified Data.Complex
import qualified Data.Ratio
import qualified Data.Maybe
import qualified Data.Either
import qualified Data.List
import qualified Data.Set
import qualified Data.Tree
import qualified Data.Map
import qualified Data.IntMap
import qualified Data.IntSet
import qualified Data.IORef
import qualified Control.Concurrent.MVar
import qualified System.IO

import Data.Type.Kind
import Data.Type.Internal.Framework
import Data.Type.Internal.TH
import Data.Type.Internal.Derive
import Data.Type.Internal.Body as Data.Type

declareMeta (ArrowK StarK $ ArrowK StarK StarK) ''(->)
deriveMeta ''()
deriveMeta ''Integer
deriveMeta ''Float
deriveMeta ''Double
deriveMeta ''Data.Bool.Bool
deriveMeta ''Data.Char.Char
deriveMeta ''Data.Int.Int
deriveMeta ''Data.Int.Int8
deriveMeta ''Data.Int.Int16
deriveMeta ''Data.Int.Int32
deriveMeta ''Data.Int.Int64
deriveMeta ''Data.Word.Word
deriveMeta ''Data.Word.Word8
deriveMeta ''Data.Word.Word16
deriveMeta ''Data.Word.Word32
deriveMeta ''Data.Word.Word64
deriveMeta ''Data.Complex.Complex
deriveMeta ''Data.Ratio.Ratio
deriveMeta ''Data.Maybe.Maybe
deriveMeta ''Data.Either.Either
deriveMeta ''[]
deriveMeta ''Data.IORef.IORef
deriveMeta ''System.IO.IO
deriveMeta ''Control.Concurrent.MVar.MVar

deriveMeta ''Data.Set.Set
deriveMeta ''Data.Tree.Tree
deriveMeta ''Data.Map.Map
deriveMeta ''Data.IntMap.IntMap
deriveMeta ''Data.IntSet.IntSet

declareTupleInstances