{-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -Wno-redundant-constraints #-} {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE FlexibleContexts #-} module GHCJS.Internal.Types where import Data.Coerce import Control.DeepSeq import GHCJS.Prim (JSVal(..)) instance NFData JSVal where rnf x = x `seq` () class IsJSVal a where jsval_ :: a -> JSVal -- default jsval_ :: Coercible a JSVal => a -> JSVal default jsval_ :: Coercible a JSVal => a -> JSVal jsval_ _ = JSVal () {-# INLINE jsval_ #-} jsval :: IsJSVal a => a -> JSVal jsval = jsval_ {-# INLINE jsval #-} data MutabilityType s = Mutable_ s | Immutable_ s | STMutable s type Mutable = 'Mutable_ () type Immutable = 'Immutable_ () data IsItMutable = IsImmutable | IsMutable type family Mutability (a :: MutabilityType s) :: IsItMutable where Mutability Immutable = 'IsImmutable Mutability Mutable = 'IsMutable Mutability ('STMutable s) = 'IsMutable