Как я могу запустить несколько операторов в GHCi? - PullRequest
0 голосов
/ 29 октября 2019

Я делаю очень простое тестирование производительности простой функции, которая, как мне кажется, имеет производительность O (n) (в квадрате) (или хуже).

В настоящее время я выполняю несколько операторов, что утомительно дляповторить:

ghci> myfunction 0 100
true
ghci> myfunciton 0 200
true
ghci> myfunction 0 300
true
ghci> :r

Можно ли выполнить все четыре оператора GHCi ? Я не могу просто объединить их, используя "родной" Haskell, поскольку я хотел бы включить :r (который является выражением GHCi - не совсем Haskell), который запускается в конце.

Ответы [ 3 ]

4 голосов
/ 29 октября 2019

Один способ, который я нашел, - это создать отдельный файл:

myfunction 0 100
myfunction 0 200
myfunction 0 300
:r

, а затем использовать:

:script path/to/file

3 голосов
/ 29 октября 2019

Вы можете определить пользовательскую команду GHCi, используя :def следующим образом:

> :def foo (\_ -> return "print 100\nprint 200\n:t length")
> :foo
100
200
length :: Foldable t => t a -> Int

В возвращаемую строку также могут быть включены : -команды, как :t выше.

2 голосов
/ 29 октября 2019

Один из способов сделать это - создать набор тестов в файле Cabal, в который вы помещаете вызовы функций как тесты, а затем используете stack test --file-watch. Это перекомпилирует и перезапускает тесты каждый раз, когда вы сохраняете файл.

...