(Заранее извините, если вопрос глупый или очевидный - у меня нет большого опыта работы с 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.
Можно открыть новую вкладку в конце вкладок?