Куча говна / Говнокод #11944 Ссылка на оригинал

0

  1. 1
arr <- return $ map (2*) lst

Я тут читал раздел на одном форуме по решению задач для школьников и наткнулся на такое говно.
- let?
- Не, не слышал.
Подозреваю, что автор не понял, что let нужно писать без in в монадах, чтобы скомпилировалось.

Запостил: HaskellGovno HaskellGovno, (Updated )

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

  • Кстати, бывают хоть какие-нибудь причины применять <- return взамен let в монадах на реальных задачах? Может например чтобы организовать какое-нибудь особое поведение?
    Ответить
  • В Хаскеле совсем нет свободного частичного применения? Может расширение компилятора какое включить?
    Чтобы можно было как в Scala или Nemerle использовать какой-нибудь символ, например _ , чтобы им указывать свободные параметры (фактически частичное применение параметров в произвольном порядке), например:
    ml = map _ list1
    Теперь функция ml принимает функцию для мапинга, а список принимать ей уже не нужно.
    Знаю про частичное применение бинарных функций, но это немного не то.
    Ответить
  • И ещё, ребят, у меня серьёзная проблема. Я для себя решил по писать ХелоВорды банковские динамические опердени на Хаскеле. Но не суть.
    У меня получилось несколько модулей и несколько потоков. Как завести глобальную переменную/переменные, видимую в нескольких модулях, чтобы можно было общаться между ними из грязных функций? Какие вообще средства для этого есть? Что из них посоветуете? Я сейчас просто остановился. Даже не знаю что с этим делать... В каком-нибудь другом языке я бы уже нашел решение, но тут так всё непривычно...
    Ответить
    • Проблема в том, что все глобальные "переменные" чисты. И засунуть туда тот же MVar не удастся. Поэтому остается только один вариант - создавать глобальный контекст в главном модуле, набивать в него, к примеру, MVar'ы или IORef'ы (чтобы можно было что-то в нем менять) и передавать его тем модулям, которым нужен доступ к глобальному состоянию.

      P.S. Может быть Роман предложит что-нибудь более красивое.
      Ответить
      • Моё видение такое: треды-воркеры должны принимать объекты каналов и переменных и прятать в замыканиях, а конфигурацией должна заниматься функция - координатор, запускающая треды на выполнение. Т.е. почти тоже самое. Глобальный контекст тоже можно, например, ReaderT прикрутить...
        Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8