Другой способ сделать это - поставить
cin.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );
после того, как ваш cin>>number;
полностью очистит входной буфер (отклонение всех дополнительных символов до тех пор, пока не будет найдена новая строка). Вы должны #include <limits>
получить метод max()
.
Вы можете уточнить, спрашиваете ли вы о «функторах в Haskell» или о Functor
s. Не всегда ясно, какая категория предполагается, когда термины теории категорий используются в Haskell.
Но да, предположение по умолчанию - Hask , которое считается категорией типов Haskell с функциями как морфизмами. В этом случае эндофунктор F на Hask будет отображать любой тип A в тип F (A) и любую функцию f между двумя типами A и B в функцию F ( f ) между некоторыми типами F (A) и F (B).
Если мы ограничимся только теми эндофункторами, которые сопоставляют любой тип a
типу (fa)
, где f
- конструктор типа с видом * -> *
, тогда мы можем описать связанную карту для функций как функцию высшего порядка с типом (a -> b) -> (fa -> fb)
, который конечно же, типовой класс Functor
.
Однако можно легко представить себе хорошо работающие эндофункторы на Hask , которые нельзя записать (напрямую) как экземпляр Functor
, например, функтор, отображающий тип с
по Либо по адресу
. И хотя очевидно, что в функторе из Hask в какую-то другую категорию нет особого смысла, разумно рассмотреть (контравариантный) функтор из Hask в Hask op .
Помимо этого, экземпляры Functor
обязательно отображают из всей категории Hask на некоторое ее подмножество, которое, таким образом, также образует категорию. Но также разумно говорить о функторах между подмножествами Hask . Например, рассмотрим функтор, который отправляет типы Maybe a
в [a]
.
Возможно, вы захотите ознакомиться с пакетом category-extras
package , который предоставляет некоторые структуры, основанные на теории категорий, встроенные в Hask , вместо того, чтобы предполагать его целостность.
Даже если в конечном итоге вы манипулируете Hask
, на Hask
можно создать множество других категорий, которые могут иметь значение для решения данной проблемы:
Hask
^ op, то есть Hask
со всеми перевернутыми стрелками Hask * Hask
, его функторами являются бифункторы a
, морфизмы - это коммутативные треугольники возьмите копию Категории для рабочего математика Мак Лейна, чтобы иметь определения, и попытайтесь самостоятельно найти проблему, которую они решают в Haskell. Особенно подавитесь сопряженными функторами (которые являются начальными / конечными объектами в правильной категории) и их отношениями с монадами.
Вы увидите, что даже если есть одна большая категория ( Hask
, или, возможно, «поднял объекты из Hask
с правыми стрелками / продукты / ...», который инкапсулирует языковой выбор Haskell, такой как нестрогость и ленивость), соответствующие производные категории выразительны.
Возможно релевантное (или, по крайней мере, интересное) обсуждение, конкретно касающееся монад, можно найти в статье «Монады не обязательно должны быть эндофункторами»:
http://www.cs.nott.ac .uk / ~ txa / publ / Relative_Monads.pdf