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

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

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

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

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

и я хочу создать класс типов Semiring . Из определения, данного выше, я хотел бы сказать " List thebases = ...

Я пытаюсь сформулировать запрос LINQ для выбора подсписка списка, в котором он соответствует условию where, например так:

List<Entities.Base> bases = this.GetAllBases();
List<Entities.Base> thebases = from aBase in bases
                               where aBase.OfficeCD == officeCD
                               select aBase;

где Base - это просто класс Entity:

public string BaseCD { get; set; }
        public string BaseName { get; set; }
        public string OfficeCD { get; set; }
        public DateTime EffectiveDate { get; set; }
        public DateTime ExpirationDate { get; set; }

Я получаю сообщение об ошибке «Невозможно неявно преобразовать тип System.Collections.Generic.IEnumerable в System.Collections.Generic.List

Итак, я попытался применить оператор Cast, но это не удалось. Теперь я вижу, что я не трогаю чтобы преобразовать тип элемента. Как я могу решить эту проблему? Спасибо!

5
задан Sam Gentile 22 October 2010 в 16:21
поделиться