代码之家  ›  专栏  ›  技术社区  ›  Julian Birch

在实例声明中使用公共函数的方法?

  •  0
  • Julian Birch  · 技术社区  · 7 年前

    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是ISOVidence类中唯一公开的方法。因此,其余部分不会编译。

    1 回复  |  直到 7 年前
        1
  •  1
  •   dfeuer    7 年前

    Haskell不允许在实例声明中使用本地定义 where 条款。但假设它确实如此。那你想做什么 仍然 convert TypeApplications

    推荐文章