У меня есть тип данных:Как создать Складной экземпляр типа с несколькими параметрами в Haskell?
data Box a b = Box a b
Я хочу, чтобы создать экземпляр Foldable
Box
и так как экземпляр Foldable
должно быть дано что-то роде * -> *
, я объявлю экземпляр как:
instance Foldable (Box a) where
foldr f x (Box r s) = undefined
Теперь я могу делать только что-то вроде:
foldr f x (Box r s) = f s x
в definiti на из foldr
но что, если вместо того, чтобы работать на s
, я хочу, чтобы что-то вроде:
foldr f x (Box r s) = f r x
компилятор не позволяет мне сделать это так, что это правильный способ пойти об этом?
@chi упс - спасибо ... к сожалению, это поздно, чтобы изменить вещи, и я не знаю, если это стоит того ... поэтому я думаю, что я удалю его – Carsten
Правильный способ? Некоторые варианты. 1. Не используйте 'Foldable', потому что вы хотите что-то семантически другое. 2. Сделайте «тип B a = бокс a a; экземпляр Складной B, где затем складываются оба элемента. 3. Сделайте экземпляр для оболочки newtype 'newtype FlipBox a b = FBox (Box b a); instance Foldable (FlipBox a) где ... '. –
@ThomasMDuBuisson, вы не можете сделать синоним типа экземпляром класса. – dfeuer