Як запустити файл Haskell в інтерпретованому режимі


76

Мені сказали, що ви можете інтерпретувати файли Haskell (що, я припускаю, означає, що вони будуть працювати як Ruby / Python / Perl). Однак я не можу знайти опцію командного рядка на GHC для цього. Він завжди хоче скомпілювати мій файл. Подивився на GHCi також, але це завжди скидає мене на репл.

Я в основному хочу просто зробити ghc -i MyFile.hs(де -i - це вигаданий прапорець, який я прикидаю корелятами до інтерпретованого режиму), і виконати його, щоб я міг отримати швидкий зворотний зв'язок під час випробування ідей та навчання.


1
У ghci можна багато чого сподобатися: це дозволяє дуже легко тестувати невеликі частини вашої програми. Я особисто маю звичку використовувати ghci для перевірки речей. Ви все ще можете запустити дію верхнього рівня main, набравши main(або використовуючи, :mainякщо вам потрібно передати аргументи командного рядка).
Даніель Вагнер,

Відповіді:


127
$ runhaskell MyFile.hs

Як варіант, runghc(це одне і те ж). ghci MyFile.hsтакож розпочне інтерактивний сеанс REPL із MyFile.hsзавантаженим, але якщо ви хочете запустити основну програму, runhaskellце шлях.

Це, мабуть, гарна ідея увійти в звичку тестувати частини вашої програми як окремі одиниці в GHCi, а не запускати все це щоразу, але очевидно, що для коротших сценаріїв найпростіше і найпростіше просто запустити цілу річ.


3
З якоїсь причини (haskell-платформа на OSX), runhaskellне на моєму шляху, але runghcбув. (так +1 для згадування runghc)
деревк

1
Я знаю, що цей потік вже давно закритий, але чи скомпільований jit інтерпретатор runhaskell?
nbroeking

40

Ви можете мати такий сценарій:

#!/usr/bin/env runhaskell
main = putStrLn "hello world"

Зробивши файл виконуваним (тобто chmod +x haskell_script), ви можете запустити його, як і будь-який інший сценарій оболонки.


4
Не зовсім як будь-який інший сценарій оболонки. Повернене значення останнього виконаного виразу, якщо ні (), автоматично виводиться runhaskell, як і в GHCi. Цього не відбувається з фактичним виконуваним файлом, скомпільованим зазвичай ghc.
Марк Рід

@MarkReed Не могли б ви навести приклад?
Лінус Арвер

Можливо, я зможу придумати штучний, але мені це важко робити. Це насправді не практичне занепокоєння, оскільки в будь-якому випадку ви хочете, щоб більшість сценаріїв виконували певний тип введення-виведення. Я просто подумав, що це варто зазначити.
Марк Рід


1

Щоб запустити код, записаний у файл, скажімо myfile.txt, що містить прості рядки коду, які працюють в інтерпретаторі GHC, наприклад:

let a = 0 in a:[1,2]
let x = [1,2] in x ++ [3,4]

Ви можете зробити:

ghc -e ':script myfile.txt'

Редагувати

У Windows потрібні подвійні лапки:

ghc -e ":script myfile.txt"

Натомість можна також відкрити GHCiі зробити :script myfile.txt.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.