Я пишу несколько одноразовых сценариев Haskell для решения некоторых проблем Проект Эйлер. Я действительно не хочу компилировать их из-за количества изменений, которые мне постоянно приходится вносить, но в некоторых случаях я обнаружил, что у меня закончилось место в стеке.
В документации для runhaskell сказано, что следующий синтаксис должен увеличить пространство стека:
runhaskell +RTS -K5M -RTS Script.hs
Это никогда не работает (в любой перестановке, которую я пробовал). Размер стека всегда остается 8 388 608 фишек. Это сводит с ума, и я не нашел особой помощи в Google.
Какие-либо предложения? Что я делаю не так?





Я предполагаю, что вы используете GHC. В главе 4 Руководства пользователя недавно выпущенной версии 6.10.1 говорится:
The only runghc flag currently is -f /path/to/ghc, which tells runghc which GHC to use to run the program.
Я не вижу ошибки, зарегистрированной в http://hackage.haskell.org/trac/ghc. Мне это кажется довольно неубедительным. Я бы посоветовал спросить в irC# ghc или в списке рассылки cvs-ghc.
Из других компиляторов / интерпретаторов Haskell, кажется, только nhc98 позволяет вам установить максимальный размер стека. В зависимости от вашей ОС, nhc98 может быть вариантом.
Просто скомпилируйте это.
Problem123.hs:
module Main where
main = do
print solution
solution = ...
Короткая и приятная командная строка:
ghc --make -O3 Problem123.hs
./Problem123
Последнее замечание: я не уверен, что назвал бы их «скриптами».
Создание сценариев всегда было одной из целей разработки Haskell, и вызов сценариев программ довольно распространен, например: groups.google.com/group/comp.lang.functional/browse_thread/…
Я делаю то же самое (Project Euler) и использую ghc. Уловка (спасибо #haskell!) Состоит в том, чтобы указать исполняемый файл иметь больший размер стека, чем компилятор.
$ ghc -O2 -o 23 23.hs
$ ./23 +RTS -K128M
Да, это достаточно просто скомпилировать с помощью --make. Однако еще проще нажать R в TextMate на OS X и запустить файл с помощью runhaskell. Когда вы взламываете и постоянно что-то меняете, это просто проще.