{-# language
    AllowAmbiguousTypes
  , DataKinds
  , FlexibleInstances
  , MultiParamTypeClasses
  , OverloadedStrings
  , TemplateHaskell
  , TypeApplications
  #-}

module Main (main) where

import Refined
import Data.Void (Void)

id_   = $$(refineTH_ @IdPred     @Int 3)
even_ = $$(refineTH_ @(Not Even) @Int 3)
odd_  = $$(refineTH_ @Odd        @Int 3)

--fails =
--  $$(refineTH
--      @( And
--           NonEmpty
--           ( Empty
--           )
--       )
--      @[Int]
--
--       [1,2,3]
--    )


--foo = $$(refineTH
--        @( And
--             Even
--             ( Xor
--                 ( And
--                     (Not (DivisibleBy 3))
--                     IdPred
--                 )
--                 (DivisibleBy 2)
--             )
--         )
--        @Int
--        3)
--bar = case foo of
--  Left e -> e
--  Right _ -> error "bad!"

main :: IO ()
main = do
  putStrLn "refined/test/Compiles.hs: it compiles!"
  foldMap print
    [ id_
    , even_
    , odd_
    ]
--  print bar
