我正在使用Haskell,我已经定义了以下类型
--Build type Transition--
data Transition = Transition {
start_state :: Int,
symbol :: Char,
end_state :: Int
} deriving Show
我希望能够定义以下过渡
Transition 0 '' 1
这意味着“由无符号给出的转换”(我需要它来计算NFA的epsilon闭包)。我怎样才能做到这一点? 谢谢!
答案 0 :(得分:9)
定义类型的想法是,传递给该字段的每个值都是该类型的“成员”。 Char
仅包含字符(空字符串不是字符)和undefined
(但建议不使用{{1}这里)。
通常,如果您想使值可选,您可以使用undefined
类型,因此:
Maybe a
现在我们可以传递两种值:data Transaction = Transaction {
start_state :: Int,
symbol :: Maybe Char,
end_state :: Int
} deriving Show
因此应解释为“ no character ”,或Nothing
,Just x
a因此,这就像一个角色,所以在你的情况下,那将是:
x
Transaction 0 Nothing 1
也是Maybe
,Functor
和Applicative
的一个实例,应该可以很方便地使用Monad
类型(是的,它有时可以介绍一些额外的工作,但通过使用Maybe
等,模式匹配转移到fmap
的数量应该相当低。
注意:就像@amalloy所说,
Maybe Char
(和NFA
)有DFA
s,而不是Transition
s。