content: {-# LANGUAGE OverloadedLabels #-}
  {-# OPTIONS_GHC -Wno-orphans #-}
  
  module Test.Sanity.NoIsLabel (tests) where
  
  import Data.Proxy
  import Data.String
  import GHC.OverloadedLabels
  import GHC.TypeLits
  import Test.Tasty
  import Test.Tasty.HUnit
  
  import Network.GRPC.Common.Protobuf ()
  import Network.GRPC.Common.Protobuf.Any ()
  
  -- | Too-polymorphic instance of 'IsLabel'
  --
  -- \"Good\" 'IsLabel' instances should have a concrete type, rather than just a
  -- variable variable @a@. However, some packages (notably @lens@) define a very
  -- general instance; this is problematic if @Data.ProtoLens.Labels@ is in scope.
  -- We should therefore avoid importing from this module in @grapesy@, leaving
  -- the choice whether or not to use @Data.ProtoLens.Labels@ to the user.
  --
  -- The point of this test module is to verify that no 'IsLabel' instance is in
  -- scope even if we import from @Network.GRPC.Common.Protobuf@.
  instance (KnownSymbol symb, IsString q) => IsLabel symb (p -> q) where
   fromLabel = \_ -> fromString (symbolVal (Proxy @symb))
  
  tests :: TestTree
  tests = testGroup "Test.Sanity.NoIsLabel" [
        testCase "Data.ProtoLens.Labels not in scope" thisShouldCompile
      ]
  
  thisShouldCompile :: Assertion
  thisShouldCompile =
      assertEqual "" "hi" $ f 5
    where
      f :: Int -> String
      f = #hi
  
  