2 import "JavaBuiltin" as Java
4 @JavaType "org.simantics.scl.compiler.dynamic.SafeDynamic"
6 @FieldNames [type_, value]
7 SafeDynamic Type Dynamic
9 instance Show SafeDynamic where
10 sb <+ SafeDynamic t v = sb << "SafeDynamic " <+ t
12 toSafeDynamic :: Typeable a => a -> SafeDynamic
13 toSafeDynamic val = SafeDynamic (typeOf val) (toDynamic val)
15 fromSafeDynamic :: Typeable a => SafeDynamic -> Maybe a
16 fromSafeDynamic (SafeDynamic type_ value) =
17 if type_ == typeOfProxy (TypeProxy :: TypeProxy a)
18 then Just (Java.unsafeCoerce value)
21 forgetType :: SafeDynamic -> Dynamic
22 forgetType (SafeDynamic _ value) = value
24 typeOfSafeDynamic :: SafeDynamic -> Type
25 typeOfSafeDynamic (SafeDynamic t _) = t