Можно ли определять новые ADT в GHCi

Комментируя новые функции в 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).


person Roman A. Taycher    schedule 03.10.2010    source источник


Ответы (4)


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

person Don Stewart    schedule 03.10.2010
comment
Думаю, потребуются более глубокие изменения в GHC; API GHC пока не предоставляет достаточной функциональности, чтобы реализовать это поверх него. Это не так уж и сложно, просто работай. - person Simon Marlow; 05.10.2010

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

person sclv    schedule 03.10.2010

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

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
person javawizard    schedule 07.11.2012

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

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

person sepp2k    schedule 03.10.2010