利用Idris建模开关门状态机

时间:2015-11-22 04:29:08

标签: state-machine idris

在ScalaWorld 2015上,Edwin Brady就伊德里斯发表了激动人心的演讲 - https://www.youtube.com/watch?v=X36ye-1x_HQ

在其中一个例子中,我记得他展示了如何使用Idris编写代表有限状态机(FSM)的程序 - 用于打开和关闭门。他的 FSM可能有点复杂,但是,考虑到以下状态:

data DoorState = DOpen | DClosed

data DoorAction = Open | Close

我写了一个函数,给定DoorActionDoorState,返回新的DoorState

runDoorOp : DoorAction -> DoorState -> DoorState
runDoorOp Close DOpen  = DClosed
runDoorOp Open DClosed = DOpen

但是,上面的函数是部分的,例如:runDoorOp Open DOpen会崩溃。

我想过使用EitherMaybe数据类型,但我认为(从听到这个话题)可以在不使用{的情况下以类型安全的方式对此FSM进行编码{1}}。

使用路径相关类型编写上述函数的惯用Idris方法是什么,而不是使用Either/Maybe

0 个答案:

没有答案