static-closure-0.1.0.0: src/Control/Static/Closure/HasClosureDict.hs
{-# LANGUAGE StaticPointers #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
module Control.Static.Closure.HasClosureDict where
import Control.Static.Closure.IsClosure (IsClosure)
import Data.Constraint (Dict)
import Data.Binary (Binary)
import Control.Instances.GHC_Packages ()
import Control.Static.Closure.TH (mkAllInstances)
class c => HasClosureDict c where
getClosureDict :: IsClosure t => t (Dict c)
{-
instance Static (Binary Int) where
getClosureDict = static Dict
instance (Typeable a, Static (Binary a)) => Static (Binary [a]) where
getClosureDict = (static (\Dict -> Dict)) `cap` (getClosureDict :: IsClosure t => t (Dict (Binary a)))
-}
-- getClosureDict = (static (\Dict -> Dict)) `cap` getClosureDict
--instance (Typeable a, Typeable b, Static (Binary a), Static (Binary b)) => Static (Binary (a,b)) where
-- getClosureDict = (static (\Dict Dict -> Dict)) `cap` (getClosureDict :: Closure t => t (Dict (Binary a))) `cap` (getClosureDict :: Closure t => t (Dict (Binary b)))
-- $(getAllInstances ''Binary)
$(mkAllInstances 'getClosureDict ''HasClosureDict ''Binary)