Есть минимум две причины:
Первая связанная с научной составной типизированного лямбда исчисления, то есть «как принято у ученых». Типизированное лямбда исчисление определяется как формальная грамматика, в которой, как вы поняли, тип как раз указывается через две (а не четыре) точки.
Другая причина связанная с тем, как часто приходится писать тот или иной токен. В этом смысле хаскелисты решили, что cons-конструктор списка они пишут чаще чем тип, и по-этому для списка выбрали более короткой токен. Тогда как Агда/Идрис программисты чаще описывают типы.
Интересно было бы посмотреть на реализацию парсер-комбинаторов, как boost::spirit, только на constexpr-ах.
Это как раз задача для функционального программирования.
> Возвращение ссылки на локальный объект
> Мне кажется, надо было не создавать новый итератор, а сохранить ссылку
Тогда можно вообще обойтись без временного объекта и возвращать me.
Вообще-то постфиксный инкремент (декремент) должен возвращать значение, а не ссылку. То есть решение проблемы — это убрать ссылку из типа результата.
Очень классный подход — давать настолько маленькими порциями, чтоб нельзя было непонять.
Как вы дошли до этого? Ведь это проблема многих (всех?) докладчиков: сразу и глубоко.
Удаление String из BaconBox не помешает держать метаданные с объектом — вы же можете создать тип:
data MetaData meta obj = MetaData meta obj
Оно раздельно выглядит композабельней и обобщенней.
Ваш метод идеально решает задачу превращения функции
f :: a -> b -> ... -> r
в функцию
f :: [String] -> String
И это я бы рассматривал отдельно от вашей предметной области, и вынес бы этот код в отдельный модуль.
И еще, можно не IO использовать, а просто некую монаду, и тогда изменяя ее, можно будет по разному обрабатывать ошибки, так как будет подставляться разная функция fail.
Первая связанная с научной составной типизированного лямбда исчисления, то есть «как принято у ученых». Типизированное лямбда исчисление определяется как формальная грамматика, в которой, как вы поняли, тип как раз указывается через две (а не четыре) точки.
Другая причина связанная с тем, как часто приходится писать тот или иной токен. В этом смысле хаскелисты решили, что cons-конструктор списка они пишут чаще чем тип, и по-этому для списка выбрали более короткой токен. Тогда как Агда/Идрис программисты чаще описывают типы.
Это как раз задача для функционального программирования.
это несомненно знак…
А у вас получается видеть тонкие грани… значит все будет классно :)
if (lambda sort = lambda v: (
lambda vec = list(v):
lambda len = len(vec):
lambda for_ = lambda r, f: map(f, r),
swap = lambda i, j: map(vec.__setitem__, (i, j), (vec[j], vec[i])):
lambda _ =
for_(range(len), lambda i:
for_(range(i, len), lambda j:
vec[i] < vec[j] or swap(i, j))):
list(vec))()()()():
__import__(«sys»).stdout.write("%s\n" % sort([3,5,2,6,8]))
)() or True:
print «You can do more in one expression»
> Мне кажется, надо было не создавать новый итератор, а сохранить ссылку
Тогда можно вообще обойтись без временного объекта и возвращать me.
Вообще-то постфиксный инкремент (декремент) должен возвращать значение, а не ссылку. То есть решение проблемы — это убрать ссылку из типа результата.
Я думаю — это именно для вас.
units.traversed.(around target 1.0).health -= 3
… может не заинтересовать?
***даже без упоминания, что это — чистый, в смысле изменения состояния, код.
Это видно :-D
Хабр не поддерживает Resharper?
Как вы дошли до этого? Ведь это проблема многих (всех?) докладчиков: сразу и глубоко.
Оно раздельно выглядит композабельней и обобщенней.
Ваш метод идеально решает задачу превращения функции
в функцию
И это я бы рассматривал отдельно от вашей предметной области, и вынес бы этот код в отдельный модуль.
И еще, можно не IO использовать, а просто некую монаду, и тогда изменяя ее, можно будет по разному обрабатывать ошибки, так как будет подставляться разная функция fail.