是否可以在GHCi中定义新的ADT

时间:2010-10-03 12:31:13

标签: haskell types interpreter ghci algebraic-data-types

在评论ghci中的新功能时,我希望ghci能够声明类型声明并声明新的ADT类型,有人告知它确实可行,并且在搜索后我找到了 this page告诉我,我可以做到

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

显然,相同类型的语法适用于模式匹配(例如,让1 = True; 2 = False)。

创建ADT会让它几乎完美吗?有谁知道目前是否可能? 我应该制作ADT临时文件并重新加载吗?

P.S。有谁知道是否有任何计划这样做?是否有ghc(i)的功能请求?

我也知道它的开源,但我目前还不够聪明,无法攻击ghc(i)。

4 个答案:

答案 0 :(得分:6)

请注意,您还可以使用:{:}在ghci中执行显式多行代码: http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/interactive-evaluation.html

答案 1 :(得分:6)

自GHC 7.4.1版本开始添加,已发布back in February

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

答案 2 :(得分:4)

不,你不能在ghci中定义新类型。

所以是的,您需要将这些定义放在一个文件中。

答案 3 :(得分:2)

不,但您可以在hbi中定义新类型(早期的解释器)。有关通过一个关于hackage的ghci库来恢复这个问题的讨论。