packages feed

generic-labels-0.1.0.1: test/ShouldCompile/Adapt/TTR.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE TemplateHaskell #-}

{-# OPTIONS_GHC -O1 #-}

module ShouldCompile.Adapt.TTR where

-- base
import GHC.Generics
  ( Generic )

-- inspection-testing
import Test.Inspection
  ( inspectTest, (===) )
import qualified Test.Inspection as Inspection
  ( Result(..) )

-- generic-labels
import Data.Label
  ( (:=)(..) )
import Data.Generic.Labels
  ( Adapt(..) )

--------------------------------------------------------------------------------

data FBI = FBI
  { float :: Float
  , bool  :: Bool
  , int   :: Int
  }
  deriving stock Generic

test, manual :: ( "int" := Int, "float" := Float ) -> FBI

test args = adapt args ( #bool := False )

manual ( _ := int, _ := float ) = FBI { float, bool = False, int }

result :: Inspection.Result
result = $( inspectTest $ 'manual === 'test )