fork(1) download
  1. {-# LANGUAGE UndecidableInstances, AllowAmbiguousTypes, KindSignatures, TypeApplications, FlexibleInstances, ConstraintKinds #-}
  2.  
  3. import Data.Kind (Constraint, Type)
  4.  
  5. main = print "ok"
  6.  
  7. class A (m :: Type -> Type)
  8.  
  9. class B (m :: Type -> Type)
  10.  
  11. instance A m => B m
  12.  
  13. data C (a :: Type)
  14.  
  15. instance A C
  16.  
  17. data D (a :: Type)
  18.  
  19. instance {-# OVERLAPPING #-} B D
  20.  
  21. data E (a :: Type)
  22.  
  23. implicitly :: a => ()
  24. implicitly = ()
  25.  
  26. test = implicitly @(A C)
  27. test1 = implicitly @(B C)
  28. --test2 = implicitly @(A D) -- doesn't compile
  29. test3 = implicitly @(B D)
  30. --test4 = implicitly @(A E) -- doesn't compile
  31. --test5 = implicitly @(B E) -- doesn't compile
Success #stdin #stdout 0.01s 5516KB
stdin
Standard input is empty
stdout
"ok"