{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
{-# OPTIONS_GHC -O0 -fmax-simplifier-iterations=0 #-}
module Lib.Functor.Test where

import Test.Tasty

import Data.Proxy (Proxy(..))
import Prelude hiding ((&&), not, (||))

import Language.Symantic.Typing
import Compiling.Term.Test

type Ifaces =
 [ Proxy (->)
 , Proxy Bool
 , Proxy Functor
 , Proxy Integer
 , Proxy Maybe
 ]
(==>) = test_compile @Ifaces

tests :: TestTree
tests = testGroup "Functor"
 [ "fmap not (Just True)" ==> Right
	 ( ty @Maybe :$ ty @Bool
	 , Just False
	 , "fmap (\\x0 -> not x0) (Just True)")
 , "not `fmap` Just True" ==> Right
	 ( ty @Maybe :$ ty @Bool
	 , Just False
	 , "fmap (\\x0 -> not x0) (Just True)")
 , "not <$> Just True" ==> Right
	 ( ty @Maybe :$ ty @Bool
	 , Just False
	 , "fmap (\\x0 -> not x0) (Just True)")
 , "False <$ Just True" ==> Right
	 ( ty @Maybe :$ ty @Bool
	 , Just False
	 , "False <$ Just True" )
 ]