Haskell вызывает функцию onload - PullRequest
2 голосов
/ 28 декабря 2011

Доброе утро, коллеги-программисты!

Я работаю над проектом с использованием haskell, и я хотел бы знать, как запустить функцию haskell, не вводя две строки в ghci, например

ghci filename.hs function

Это можно сделать, только сделав:

 ghci filename.hs
function

????Я ищу что-то вроде main () в C, который запускается автоматически при компиляции программы. Есть ли что-то подобное?Я проверял опцию -e на ghci, но я не могу заставить ее работать!

Большое спасибо!

Приветствия!

Ответы [ 2 ]

8 голосов
/ 28 декабря 2011

Вместо этого вы, вероятно, ищете ghc -e:

> echo 'foo x y z = x+y*z' > foo.hs  % let's make a foo.hs file
> ghc foo.hs -e 'foo 1 2 3'          % call the function in foo.hs
=> 7

Также обратите внимание, что вы также можете использовать команду :reload в ghci.Загрузите файл в ghci, отредактируйте, наберите :reload и протестируйте снова.Кроме того, если это кажется слишком утомительным, вы также можете определить макрос ghci, который позволит вам перезагрузить и протестировать вашу функцию одновременно:

> :def test \x -> return (":reload\n" ++ x)
> :test foo 1 2 3
=> Ok, modules loaded: Foo.
7

Если вы хотите создавать реальные программы, а не быстротестируя свои функции, тогда вам лучше прочитать другие ответы по написанию main функций.

6 голосов
/ 28 декабря 2011

Я предполагаю, что function имеет тип IO (). Тогда вы можете просто указать main = function и использовать, например, runhaskell modulename из командной строки. Как и в C, main - это специальная функция.

Для пояснения, на всякий случай: если ваш function чистый, то есть тот, чей тип не задействует IO, вы не сможете "запустить его". Я полагаю, что это упрощение, но по сути GHCi называет print function. Если вы хотите имитировать это, вы можете использовать что-то вроде main = print function и использовать runhaskell. Предполагается, что тип function является экземпляром Show.

...