packages feed

overloaded-0.3.1: test/Overloaded/Test/RecordFields.hs

{-# LANGUAGE OverloadedLabels #-}
{-# OPTIONS
    -fplugin=Overloaded
    -fplugin-opt=Overloaded:RecordFields:Labels=Optics.HasField.field
  #-}
module Overloaded.Test.RecordFields where

import Optics.Core      (over, view)
import Test.Tasty       (TestTree, testGroup)
import Test.Tasty.HUnit (testCase, (@?=))

tests :: TestTree
tests = testGroup "RecordFields"
    [ testCase "view" $
        view #petName bob @?= "bob"
    , testCase "over" $
        over #petAge succ bob @?= bob { petAge = 4 }
    ]

data Pet u = MkPet
    { petName  :: String
    , petAge   :: Int
    , petExtra :: u
    }
  deriving (Eq, Show)

bob :: Pet ()
bob = MkPet "bob" 3 ()