不将char传递给在Haskell中期望它的函数

时间:2018-02-16 08:43:47

标签: haskell

我正在使用Haskell,我已经定义了以下类型

--Build type Transition--
data Transition = Transition {
     start_state :: Int, 
     symbol :: Char, 
     end_state :: Int
} deriving Show

我希望能够定义以下过渡

Transition 0 '' 1 

这意味着“由无符号给出的转换”(我需要它来计算NFA的epsilon闭包)。我怎样才能做到这一点? 谢谢!

1 个答案:

答案 0 :(得分:9)

定义类型的想法是,传递给该字段的每个值都是该类型的“成员”。 Char仅包含字符(空字符串不是字符)和undefined(但建议使用{{1}这里)。

通常,如果您想使值可选,您可以使用undefined类型,因此:

Maybe a

现在我们可以传递两种值:data Transaction = Transaction { start_state :: Int, symbol :: Maybe Char, end_state :: Int } deriving Show因此应解释为“ no character ”,或NothingJust x a因此,这就像一个角色,所以在你的情况下,那将是:

x

Transaction 0 Nothing 1也是MaybeFunctorApplicative的一个实例,应该可以很方便地使用Monad类型(是的,它有时可以介绍一些额外的工作,但通过使用Maybe等,模式匹配转移到fmap的数量应该相当低。

  

注意:就像@amalloy所说,Maybe Char(和NFA)有DFA s,而不是Transition s。