content: {-# OPTIONS -Wno-orphans #-}
  {-# LANGUAGE DerivingVia #-}
  {-# LANGUAGE LinearTypes #-}
  {-# LANGUAGE QuantifiedConstraints #-}
  {-# LANGUAGE RebindableSyntax #-}
  {-# LANGUAGE ScopedTypeVariables #-}
  {-# LANGUAGE TupleSections #-}
  {-# LANGUAGE NoImplicitPrelude #-}
  {-# OPTIONS_HADDOCK hide #-}
  
  module Control.Functor.Linear.Internal.Instances
    ( Data (..),
    )
  where
  
  import Control.Functor.Linear.Internal.Class
  import qualified Data.Functor.Linear.Internal.Applicative as Data
  import qualified Data.Functor.Linear.Internal.Functor as Data
  
  -- # Deriving Data.XXX in terms of Control.XXX
  -------------------------------------------------------------------------------
  
  -- | This is a newtype for deriving Data.XXX classes from
  -- Control.XXX classes.
  newtype Data f a = Data (f a)
  
  -- # Basic instances
  -------------------------------------------------------------------------------
  
  instance (Functor f) => Data.Functor (Data f) where
    fmap f (Data x) = Data (fmap f x)
  
  instance (Applicative f) => Data.Applicative (Data f) where
    pure x = Data (pure x)
    Data f <*> Data x = Data (f <*> x)
  