Skip to content

Tactics plugin cannot derive I from combinators S and K in tagless-final style #562

Closed
@siraben

Description

@siraben

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions