我需要一种树和一张地图,所以我这样做:
type 'a grouping =
G of ('a * 'a grouping) list
with
member g.map f =
let (G gs) = g
gs |> List.map (fun (s, g) -> f s, g.map f) |> G
但这让我想知道:
- 该
map
成员是样板。在 Haskell 中,GHC 将为fmap
我实现 (... deriving (Functor)
)。我知道 F# 没有类型类,但有没有其他方法可以避免我自己在 F# 中编写地图? - 我能以某种方式避开这条线
let (G gs) = g
吗? - 这整个结构在某种程度上是非惯用的吗?这对我来说看起来很奇怪,但也许这只是因为将成员放在 sum 类型上对我来说是新的。