syntactic-1.2: src/Data/DynamicAlt.hs
-- | An alternative to "Data.Dynamic" with a different constraint on 'toDyn'
module Data.DynamicAlt where
import Data.Dynamic ()
import Data.Typeable
import GHC.Prim
import Unsafe.Coerce
import Data.PolyProxy
data Dynamic = Dynamic TypeRep Any
toDyn :: forall a b . Typeable (a -> b) => P (a -> b) -> a -> Dynamic
toDyn _ a = case splitTyConApp $ typeOf (undefined :: a -> b) of
(_,[ta,_]) -> Dynamic ta (unsafeCoerce a)
fromDyn :: Typeable a => Dynamic -> Maybe a
fromDyn (Dynamic t a)
| b <- unsafeCoerce a
, t == typeOf b
= Just b
fromDyn _ = Nothing