小编Dav*_*ale的帖子

F# - Type参数不能用作类型构造函数

我正在使用Akkling在F#工作,所以我可以使用Akka.net上的强类型演员,但是我在F#中遇到了设计限制,我想知道是否有一种优雅的方式.

拿我的根消息类型,我真的不想在那里有IActorRef <_>,因为这种类型将存在于一个公共库中,并且不应该知道它使用的消息系统.此外,为了便于测试,我不想创建整个actor系统(或测试工具包).

type MessageType =
    | World of WorldMessage
    | Location of IActorRef<LocationMessage> * LocationMessage
    | Client of IActorRef<LocationMessage> * ClientMessage
Run Code Online (Sandbox Code Playgroud)

一个可怕的工作是:

type MessageType<'LocationActor, 'PlayerActor, 'ClientActor> =
    | World of WorldMessage<'ClientActor>
    | Location of 'LocationActor * LocationMessage<'ClientActor>
    | Client of 'ClientActor * ClientMessage<'LocationActor>
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想这样但有一个语言限制(错误:类型参数不能用作类型构造函数):

type MessageType<'a> =
    | World of WorldMessage<'a>
    | Location of 'a<LocationMessage> * LocationMessage
    | Client of 'a<LocationMessage> * ClientMessage
Run Code Online (Sandbox Code Playgroud)

f# akka.net

10
推荐指数
1
解决办法
222
查看次数

标签 统计

akka.net ×1

f# ×1