Noob遇到Haskell问题 - 不在范围错误中

时间:2016-04-16 19:28:56

标签: haskell

我是Haskell的初学者,并且在获取由4个空列表组成的元组时遇到一些困难。以下代码是我的Haskell程序的全部内容。

import Data.List
import System.IO

l = []
h = []
a = []
x = []

TextEditor = (l, h, a, x) 

backspace :: TextEditor -> TextEditor
backspace (TextEditor l h a x) = 
    (TextEditor(reverse (tail (reverse l))) [] a x)

我收到多个错误。

Not in scope: data constructor ‘TextEditor’
Not in scope: type constructor 'TextEditor'

尽管谷歌搜索我无法解决我的功能有什么问题。有人可以帮我推动正确的方向吗?

2 个答案:

答案 0 :(得分:2)

我猜你正在尝试做的是:

type L = [Char]  -- aka String
type H = [Char]
type A = [Char]
type X = [Char]

data TextEditor = TextEditor L H A X -- You really should use more discriptive names

backspace :: TextEditor -> TextEditor
backspace (TextEditor l h a x) = 
    (TextEditor(reverse (tail (reverse l))) [] a x)

答案 1 :(得分:1)

您在此处所做的事情被声明为名为TextEditor的顶级范围符号(如变量)。

您可能想要做的是声明TextEditor数据类型及其相应的类型构造函数,可以这样做:

data TextEditor = TextEditor ([String], [String], [String], [String])

(您的定义可能会有所不同;您没有声明lhax的类型,所以我只是假设{{1} })

我建议在the appropriate LYAH chapter中阅读[String]声明和类型类定义。