与monad-coroutine包的工作,我有一些协同程序做了很多工作,它需要一些投入,不时:提高协程请求类型安全
Coroutine (Request SomeRequest SomeResponse) (State MyState) a
其中
data SomeRequest
= GetImportantData Int
| OtherImportantStuff Float
| SomethingElse (Vector Int)
| ...
data SomeResponse
= ImprtantData (Vector Float)
| ImportantStuff Int
| ...
正如你所看到的对于SomeRequest
中的每个条目,我都有相应的条目SomeResponse
。
在这个协同程序的运行时我有这样的事情:
...
ImportantData info <- request (GetImportantData 666)
...
现在恐怕这种做法并不好,因为我要的是确保每当我请求与GetImportantData
重要数据唯一可能的回应是ImportantData
,没有别的。使用我目前的方法,我必须在每次发出请求时都进行模式匹配(以确保输入实际上是我想要的)。
什么办法可以提高设计/方法,以确保为GetImportantData
我得到ImportantData
回来只为OtherImportantStuff
我得到ImportantStuff
只有等?
将每个构造函数转换为它自己的类型,并使用带有相关数据或类型家族。 – user2407038