{-# OPTIONS_GHC -fno-warn-orphans #-}

module Control.Monad.Select.OrphanInstances where

import Control.Monad.Select
import Control.Monad.Trans.Control.Identity
import Control.Monad.Trans.Select qualified as T
import Data.Functor.Identity

instance MonadBaseControlIdentity Identity m => MonadSelect r (T.SelectT r m) where
  select :: forall a. ((a -> r) -> a) -> SelectT r m a
select (a -> r) -> a
f = ((a -> m r) -> m a) -> SelectT r m a
forall r (m :: * -> *) a. ((a -> m r) -> m a) -> SelectT r m a
T.SelectT (((a -> m r) -> m a) -> SelectT r m a)
-> ((a -> m r) -> m a) -> SelectT r m a
forall a b. (a -> b) -> a -> b
$ \ a -> m r
k -> ((forall x. m x -> Identity x) -> Identity a) -> m a
forall a. ((forall x. m x -> Identity x) -> Identity a) -> m a
forall (b :: * -> *) (m :: * -> *) a.
MonadBaseControlIdentity b m =>
((forall x. m x -> b x) -> b a) -> m a
liftBaseWithIdentity (((forall x. m x -> Identity x) -> Identity a) -> m a)
-> ((forall x. m x -> Identity x) -> Identity a) -> m a
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> Identity x
runInIdentity ->
    a -> Identity a
forall a. a -> Identity a
Identity (a -> Identity a) -> a -> Identity a
forall a b. (a -> b) -> a -> b
$ (a -> r) -> a
f ((a -> r) -> a) -> (a -> r) -> a
forall a b. (a -> b) -> a -> b
$ Identity r -> r
forall a. Identity a -> a
runIdentity (Identity r -> r) -> (a -> Identity r) -> a -> r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m r -> Identity r
forall x. m x -> Identity x
runInIdentity (m r -> Identity r) -> (a -> m r) -> a -> Identity r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> m r
k