簡體   English   中英

如何在 GADT 中表示此 FSM

[英]How to represent this FSM in GADT

我正在觀看視頻並了解 Scala 中的 GADT。

我能夠代表下面的 state 機器

在此處輸入圖像描述

這是我的代碼

type Idle
type Moving

enum Direction:
  case East, West, North, South
import Direction.*

enum Command[From, To]:
  case Turn(direction: Direction) extends Command[Idle, Idle]
  case Start extends Command[Idle, Moving]
  case Stop extends Command[Moving, Idle]
  case Chain[A, B, C](command1: Command[A, B], command2: Command[B, C])
      extends Command[A, C]

import Command.*

extension [A, B, C](command1: Command[A, B])
  infix def ~>(command2: Command[B, C]): Command[A, C] =
    Chain(command1, command2)

現在我想改變一個細節。 我想在IdleMoving時賦予Turn的能力。 Turn命令之后,我希望機器保留它所在的任何 state。例如,如果機器正在移動並且需要轉彎,我希望 state 機器保留該信息。

例如Start ~> Turn(West)應該是Command[Idle,Moving] & Start ~> Stop ~> Turn(West)應該是Command[Idle,Idle]

在此處輸入圖像描述

我通過向Turn命令添加類型參數來解決它在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM