packages feed

overloaded-0.2.1: example/Boring.hs

{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE TypeOperators    #-}
{-# OPTIONS -fplugin=Overloaded
            -fplugin-opt=Overloaded:Unit=Data.Boring.boring #-}
module Main (main) where

import Data.Constraint    (Dict (..))
import Data.Type.Equality ((:~:) (..))
import Data.Void          (Void)
import Test.HUnit         ((@?=))

main :: IO ()
main = do
    -- vanilla unit
    let ex1 :: ()
        ex1 = ()
    () @?= ex1

    -- Boring instances
    let ex2 :: [Void]
        ex2 = ()

    [] @?= ex2

    let ex3 :: Dict (Ord [(Int, Char)])
        ex3 = ()

    let ex4 :: (Int :~: Int, ())
        ex4 = ()
    (Refl, ()) @?= ex4