Я делаю реализацию кучи Фибоначчи в Haskell, и я не уверен, какой именно способ это сделать.
Например, я хочу заказать узлы. Так что я могу сделать что-то вроде:
instance Ord (FibNode e) where
f1 `compare` f2 = (key f1) `compare` (key f2)
Это было бы легче сделать, если бы я сделал FibNode
монадой. Но в других случаях я хочу свернуть братьев и сестер узла или их детей и т. Д. Итак, определив функтор, где f x = f $ key x
не будет работать постоянно.
Помимо определения моего собственного fmapKey
, fmapSibs
, fmapKids
... есть ли способ сделать это?