Closed
Description
Consider
class SKIC repr where
capp :: repr (a -> b) -> repr a -> repr b
cK :: repr (a -> b -> a)
cS :: repr ((a -> b -> c) -> (a -> b) -> a -> c)
cI :: SKIC repr => repr (a -> a)
cI = _
The tactics plugin fails to fill the hole. One potential solution would be
cI = cS `capp` cK `capp` cK
This has been tested as of commit 6c14163. I tested to see if this would be the case in the tagless-final HOAS encoding of lambda calculus as well, but it succeeded, i.e.
class Lam repr where
app :: repr (a -> b) -> repr a -> repr b
lam :: (repr a -> repr b) -> repr (a -> b)
id_ :: Lam repr => repr (a -> a)
id_ = _
The plugin generates (lam (\ x -> x))
as a solution.