1. Куча / Говнокод #13966

    +121

    1. 1
    2. 2
    3. 3
    ref <- newIORef 0
    replicateM_ 1000000 $ modifyIORef ref (+1)
    readIORef ref >>= print

    Запостил: LispGovno, 17 Октября 2013

    Комментарии (10) RSS

    • В туже голубую колонну:
      ref <- newIORef '1'
      forever $ atomicModifyIORef ref (\_ -> ('2', ()))

      Зачем вообще они реализуют настолько ленивую хрень, что она никогда не работает? Хоть кто-нибудь умеет этой функцией пользоваться не получая стек оверфлов на произвольных данных?
      Ответить
      • показать все, что скрытоКакой багор )))
        Ответить
      • Прямо под этим примером написано «Use atomicModifyIORef' or atomicWriteIORef to avoid this problem». Наедь до кучи и на foldl, чего уж там.
        Ответить
        • А зачем писать рядом 2 функции? Одну с опасным лезвием, а вторую с безопасным? Неужели чтобы недочитавший ловил ошибки в релизе на реальных данных? Да и нахрена императивным монадам ленивая версия? Фолду функциональному ленивость к месту.
          Ответить
          • Одну ягодицу мы побреем жилетом, другую рапиркой.
            (_R_)
            (_J_)
            Ответить
          • Монада IO - всё такая же функциональная, как и весь остальной язык. Ленивость ей полезна (а иногда вредна), как и другим частям языка. Типичный пример полезного ленивого IO - getContents.
            Ответить
            • ну тогда atomicModifyIORef типичный пример вредного IO
              Ответить

    Добавить комментарий