module Internal.Capsule (

    Capsule (Capsule)

) where

    -- Control
    import Control.Applicative as Applicative

    -- Don’t use newtype since this would defeat the purpose of Capsule.
    data Capsule val = Capsule val

    instance Functor Capsule where

        fmap fun (Capsule val) = Capsule (fun val)

    instance Applicative Capsule where

        pure = Capsule

        Capsule fun <*> Capsule arg = Capsule (fun arg)