.CudaScalar<‘一>类型’‘in_’与’FSI_0002.CudaScalar<‘>’类型不匹配
这让我感到惊讶,因为错误没有显示出来 智能感知 </跨度> ,但只有当我尝试在F#Interactive中运行它时。我不确定再次在这做什么。我可能会滥用这种类型 系统 </跨度> 有点太多,但我决心以无标签的方式完成这个Cuda编译器,无论如何。我需要在 中这样
我不确定我是否理解你的问题/你想要实现的目标。
我不知道为什么你在这个类型的中间插入了这个函数,在你之前的问题中它是必要的但是在这里我不这么认为。
如果你按自然顺序编写它,它编译:
type CudaScalar<'t> = CudaScalar of name: string with member t.Name = t |> fun (CudaScalar name) -> name type TypePrinter<'t>() = class end let inline print_type x = ((^T or ^in_) : (static member PrintType: TypePrinter< ^in_> -> string) x) type TypePrinter with static member inline PrintType(_: TypePrinter<float32>) = "float32" static member inline PrintType(_: TypePrinter<int>) = "int" type ArgsPrinter = ArgsPrinter with static member inline PrintArg(_: ArgsPrinter, t: CudaScalar< ^t>) = [|print_type (TypePrinter< ^t>()); t.Name|] |> String.concat " " let inline print_arg x = let inline call (tok : ^T) = ((^T or ^in_) : (static member PrintArg: ArgsPrinter * ^in_ -> string) tok, x) call ArgsPrinter
如果我错过了什么,请告诉我。
的 编辑 强>
尝试添加更多重载后,尝试添加如下:
type ArgsPrinter with static member inline PrintArg(_: ArgsPrinter, (x1, x2)) = [|print_arg x1;print_arg x2|] |> String.concat ", " type ArgsPrinter with static member inline PrintArg(_: ArgsPrinter, (x1, x2, x3)) = [|print_arg x1;print_arg x2;print_arg x3|] |> String.concat ", "
我的意思是,'延伸'两次。