У меня проблема, о которой я не знаю, как рассуждать. Я как раз собирался спросить, может ли кто-нибудь помочь мне с конкретной проблемой, но меня осенило, что я могу задать более общий вопрос и, надеюсь, в результате получить лучшее общее понимание. С надеждой. Итак, вот:
Обычно это достаточно очевидно, когда ваша программа слишком ленива, потому что вы в конечном итоге сталкиваетесь с вопиющими проблемами, такими как, например, утечка пространства. У меня обратная проблема :моя программа слишком строгая. Я пытаюсь завязатьузлов и обнаруживаю, что определенные вещи, которые я пытаюсь делать, каким-то образом побеждают лень, в которой я нуждаюсь. Итак, мой общий вопрос: как отладить нежелательную строгость?
Для полноты, вот мой конкретный случай :Я нахожусь в RWS
, где компонент записи заполняет карту, а компонент чтения наблюдает за окончательным состоянием этой карты. Я не могу сделать ничего строгого с этой картой, пока не закончу ее заполнение. Кажется, не проблема найти значения на карте, например:
do
m <- ask
val <- m ! key
doSomething val -- etc.
Но (!)
терпит неудачу при использовании error
, тогда как вместо этого я предпочел бы ошибиться, используя fail
моей монады. Итак, я хотел бы сделать что-то вроде следующего:
do
m <- ask
maybe
(fail "oh noes")
(doSomething)
(lookup key m)
Это приводит мою программу к <
, чего я не понимаю. Мне не кажется что это должно быть более строгим, чем использование (!)
, но, очевидно, я ошибаюсь...