@@ -11,21 +11,12 @@ module Control.Distributed.Process.Internal.Dynamic
12 , fromDynamic
12 , fromDynamic
13 , dynTypeRep
13 , dynTypeRep
16 , dynApply
14 , dynApply
18 , GHC.unsafeCoerce#
16 , GHC.unsafeCoerce#
21−import Data.Typeable
19+import Data.Typeable (Typeable, TypeRep, typeOf, funResultTy)
29import qualified GHC.Prim as GHC (Any, unsafeCoerce#)
20import qualified GHC.Prim as GHC (Any, unsafeCoerce#)
30import Data.Maybe (fromMaybe)
21import Data.Maybe (fromMaybe)
@@ -52,20 +43,6 @@ dynTypeRep (Dynamic t _) = t
52instance Show Dynamic where
43instance Show Dynamic where
53 show = show . dynTypeRep
44 show = show . dynTypeRep
55−dynBind :: TyCon -> (forall a b. m a -> (a -> m b) -> m b) -> Dynamic -> Dynamic -> Maybe Dynamic
56−dynBind m bind (Dynamic t1 x) (Dynamic t2 f) =
57− case splitTyConApp t1 of
58− (m', [a]) | m' == m ->
59− case funResultTy t2 a of
60− Just mb -> Just (Dynamic mb (GHC.unsafeCoerce# bind x f))
64−dynBind' :: TyCon -> (forall a b. m a -> (a -> m b) -> m b) -> Dynamic -> Dynamic -> Dynamic
65−dynBind' m bind x f = fromMaybe (error typeError) (dynBind m bind x f)
67− typeError = "Type error in dynamic bind.\nCan't bind " ++ show x ++ " to " ++ show f
69dynApply :: Dynamic -> Dynamic -> Maybe Dynamic
46dynApply :: Dynamic -> Dynamic -> Maybe Dynamic
70dynApply (Dynamic t1 f) (Dynamic t2 x) =
47dynApply (Dynamic t1 f) (Dynamic t2 x) =
71 case funResultTy t1 t2 of
48 case funResultTy t1 t2 of