{-# LANGUAGE FunctionalDependencies #-}
module Hercules.CNix.Encapsulation
( HasEncapsulation (..),
nullableMoveToForeignPtrWrapper,
)
where
import Foreign (Ptr, nullPtr)
import Prelude
class HasEncapsulation a b | b -> a where
moveToForeignPtrWrapper :: Ptr a -> IO b
nullableMoveToForeignPtrWrapper :: HasEncapsulation a b => Ptr a -> IO (Maybe b)
nullableMoveToForeignPtrWrapper :: forall a b. HasEncapsulation a b => Ptr a -> IO (Maybe b)
nullableMoveToForeignPtrWrapper Ptr a
rawPtr | Ptr a
rawPtr forall a. Eq a => a -> a -> Bool
== forall a. Ptr a
nullPtr = forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a. Maybe a
Nothing
nullableMoveToForeignPtrWrapper Ptr a
rawPtr = forall a. a -> Maybe a
Just forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a b. HasEncapsulation a b => Ptr a -> IO b
moveToForeignPtrWrapper Ptr a
rawPtr