Можно ли определить новые ADT в GHCi - PullRequest
2 голосов
/ 03 октября 2010

Комментируя новые функции в ghci, я хотел, чтобы у ghci была возможность объявлять объявление типа и объявлять новые типы ADT, кто-то сообщил, что это действительно возможно, и после поиска я нашел эта страница , которая сказала мне, что я могу сделать

let numUniques' :: (Eq a) => [a] -> Int; numUniques' = length . nub

Очевидно, что тот же самый синтаксис работает для сопоставления с образцом (например, let a 1 = True; a 2 = False).

Создание ADT сделает его почти идеальным? Кто-нибудь знает, возможно ли это в настоящее время? Должен ли я просто создать скретч-файл ADT и перезагрузить его?

P.S. Кто-нибудь знает, есть ли планы сделать это? Есть ли запросы функций для ghc (i)?

Также я знаю его открытый исходный код, но в настоящее время я недостаточно умен, чтобы взломать ghc (i).

Ответы [ 4 ]

6 голосов
/ 07 ноября 2012

Это было добавлено с версии 7.4.1 GHC, которая была выпущена в феврале :

jcp@butler:~$ ghci
GHCi, version 7.6.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> data Test = Foo | Bar | Baz deriving (Read, Show)
Prelude> Foo
Foo
Prelude> read "Bar" :: Test
Bar
Prelude> :t Baz
Baz :: Test
6 голосов
/ 03 октября 2010

Обратите внимание, что вы также можете сделать явный многострочный код в ghci с :{ и :}: http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/interactive-evaluation.html

4 голосов
/ 03 октября 2010

Нет, вы не можете определять новые типы в ghci.

Так что да, вам нужно поместить эти определения в файл.

2 голосов
/ 04 октября 2010

Нет, но вы можете определить новые типы в hbi (более ранний интерпретатор). Есть дискуссия о возвращении этого через библиотеку ghci по взлому.

...