Есть ли способ выразить в Haskell, что тип должен быть экземпляром класса типов более чем одним способом?

(Заранее извините, если вопрос глупый или очевидный - у меня нет большого опыта работы с Haskell ).

Есть ли способ выразить, что тип должен быть экземпляром класса типов более чем одним способом? Лучше всего это проиллюстрировать на примере (который, вероятно, несколько глуп): в математике мы можем сказать, что полукольцо - это набор, который является коммутативным моноидом при одной операции (которую мы назовем сложением, тождество 0) и моноидом при другой (которую мы назовем умножением) вместе с требованиями, которые умножение распределяет по сложению и что 0 аннулирует все элементы при умножении. Последние части здесь не важны.

Предположим теперь, что у меня есть класс типов Monoid (не путать с Data.Monoid ),

class Monoid m where
    unit :: m 
    operation :: m -> m -> m

и я хочу создать класс типов Semiring . Из определения, данного выше, я хотел бы сказать, что «если тип r является моноидом двумя ( различными ) способами, мы назовем его полукольцом». Так что я бы хотел что-нибудь вроде

class (Monoid r, Monoid r) => Semiring r where ...

, что, конечно, не работает. По общему признанию, но вкладка располагается после вкладки, в которой открыт NERDTree. Можно ли открыть новую вкладку в конце вкладок?

В NERDTree Shift T открывает файл в новой вкладке, но вкладка располагается после вкладки, в которой открыт NERDTree.

Можно открыть новую вкладку в конце вкладок?

17
задан kfl62 22 October 2010 в 16:10
поделиться