我是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'
尽管谷歌搜索我无法解决我的功能有什么问题。有人可以帮我推动正确的方向吗?
答案 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])
(您的定义可能会有所不同;您没有声明l
,h
,a
或x
的类型,所以我只是假设{{1} })
我建议在the appropriate LYAH chapter中阅读[String]
声明和类型类定义。