Отладка нежелательной строгости?

У меня проблема, о которой я не знаю, как рассуждать. Я как раз собирался спросить, может ли кто-нибудь помочь мне с конкретной проблемой, но меня осенило, что я могу задать более общий вопрос и, надеюсь, в результате получить лучшее общее понимание. С надеждой. Итак, вот:

Обычно это достаточно очевидно, когда ваша программа слишком ленива, потому что вы в конечном итоге сталкиваетесь с вопиющими проблемами, такими как, например, утечка пространства. У меня обратная проблема :моя программа слишком строгая. Я пытаюсь завязатьузлов и обнаруживаю, что определенные вещи, которые я пытаюсь делать, каким-то образом побеждают лень, в которой я нуждаюсь. Итак, мой общий вопрос: как отладить нежелательную строгость?


Для полноты, вот мой конкретный случай :Я нахожусь в RWS, где компонент записи заполняет карту, а компонент чтения наблюдает за окончательным состоянием этой карты. Я не могу сделать ничего строгого с этой картой, пока не закончу ее заполнение. Кажется, не проблема найти значения на карте, например:

do
  m <- ask
  val <- m ! key
  doSomething val -- etc.

Но (!)терпит неудачу при использовании error, тогда как вместо этого я предпочел бы ошибиться, используя failмоей монады. Итак, я хотел бы сделать что-то вроде следующего:

do
  m <- ask
  maybe
    (fail "oh noes")
    (doSomething)
    (lookup key m)

Это приводит мою программу к <>, чего я не понимаю. Мне не кажется что это должно быть более строгим, чем использование (!), но, очевидно, я ошибаюсь...

11
задан Community 23 May 2017 в 10:29
поделиться