Я пытаюсь заставить работать следующий код:
instance (Integral n, OffsetCalculator o, HexDirection d) => (IsoEvidence (Axial d n) (Offset d o n)) where
po :: Proxy o
po = Proxy
pd :: Proxy d
pd = Proxy
adj :: Vector2D n -> n
adj p = adjustment po $ p ^. otherAxis pd
convert :: (n -> n -> n) -> Vector2D n -> Vector2D n
convert f p = (offsetAxis pd) %~ (flip f (adj p)) $ p
convertFrom (Offset p) = Axial $ convert (P.-) p
convertTo (Axial p) = Offset $ convert (P.+) p
Я конвертирую это из некоторого ранее скомпилированного кода, поэтому я относительно уверен, что код концептуально в порядке.Моя проблема в том, что convertFrom и convertTo являются единственными открытыми методами класса IsoEvidence.Следовательно, остальная часть этого не компилируется.
Если я уберу слово «преобразовать» из объявления экземпляра, оно начнет нуждаться в самих параметрах Proxy, что делает код более уродливым.Есть ли способ заставить работать то, что я пытаюсь сделать?