Haskell 查找不同的终端和非终端符号

Haskell 查找不同的终端和非终端符号,haskell,context-free-grammar,Haskell,Context Free Grammar,我目前正在编写两个函数,用于返回给定语法中出现的所有不同终端的列表 以下是语法的类型: data Grammar = Grammar [Prod] deriving (Show, Eq) 以下是我到目前为止的情况: terminals :: Grammar -> [String] terminals ts = nub [ x | x <-ts] nonterms :

我目前正在编写两个函数,用于返回给定语法中出现的所有不同终端的列表

以下是语法的类型:

data Grammar = Grammar [Prod]
               deriving (Show, Eq)
以下是我到目前为止的情况:

terminals :: Grammar -> [String]                                          
terminals ts = nub [ x | x <-ts]

nonterms  :: Grammar -> [String]
nonterms nt = nub [ x | x <- nt]
但是,我使用的函数不起作用,因为GHCI无法将预期类型“[String]”与实际类型“Grammar”匹配

我脱离了上下文无关语法(CFG)的基本原则,即上下文无关语法是

 G = (T,N,P,S)
其中T是终端符号(“令牌”)的集合T、非终端符号的集合N、产品的集合p和开始符号S

如何使用/编写两个函数来返回给定语法中出现的所有不同终端(分别为非终端)的列表。以上语法的三个例子。谢谢。

终端::语法->[String]
terminals :: Grammar -> [String]                                          
terminals ts = nub [ x | x <-ts]

终端ts=nub[x | x[a]->[a]
,因此要返回
[String]
,它的输入也必须是
[String]
。这意味着
[x | x
语法
不是Haskell内置的类型。请发布它的定义。很抱歉,刚刚修复了它。
terminals :: Grammar -> [String]                                          
terminals ts = nub [ x | x <-ts]