小编Mat*_*ner的帖子

使用路径相关的类型参数覆盖函数

编辑:感谢Derek指出错误消息的关键部分,我能够更多地提取关键部分,它似乎是关于存在类型.如果我在语言参考中正确理解§3.2.10对值的存在量化,那么val m: Map[x.type#S, x.type#S] forSome { val x: T }就是一个简写val m: Map[t#S, t#S] forSome { type t <: T with Singleton }.然而在下面的代码中,它们的行为却有所不同.

trait Type {
  type S
}

class Concrete extends Type {
  type S = Double
}

trait BaseWorks {
  type T <: Type
  val m: t#S forSome { type t <: T with Singleton }
}

class Works extends BaseWorks {
  override type T = Concrete
  override val m = 0.0 …
Run Code Online (Sandbox Code Playgroud)

scala abstract-data-type existential-type path-dependent-type

6
推荐指数
1
解决办法
581
查看次数

F#中自然数的类型级编码

我试图将自然数编码为F#中的类型,以便能够在编译时检查相等而不是运行时.我能想到的最好的是

type Nat<'T> =
    abstract member AsInt : int

type Z() = 
    interface Nat<Z> with 
        member __.AsInt = 0

type S<'P>(prev : Nat<'P>) =
    interface Nat<S<'P>> with 
        member __.AsInt = 1 + prev.AsInt

type TNat =
    static member zero = Z() :> Nat<Z>
    static member succ (prev : Nat<'P>) = S(prev) :> Nat<S<'P>> 
    static member one = TNat.succ(TNat.zero)
    static member two = TNat.succ(TNat.one)
Run Code Online (Sandbox Code Playgroud)

我不确定我是否对代码感到满意.它能以更好(或更容易)的方式完成吗?

我能确保AsInt在编译时计算出来吗?

f# types inline type-level-computation

4
推荐指数
1
解决办法
423
查看次数

fsi和fsianycpu中的处理器数量不同

我有一台机器上的以下怪异的行为与40芯:调用System.Environment.ProcessorCountfsi(12.0.30815.0)和fsianycpu(12.0.30815.0)导致不同的结果.

fsi我进入System.Environment.ProcessorCount = 32fsianycpu我得到System.Environment.ProcessorCount = 40.这似乎也会影响任务并行库,当运行简单的测试代码fsi(处理器数量错误)时,它只使用所有可用内核的80%.

可能是什么原因?

f# task-parallel-library

3
推荐指数
1
解决办法
147
查看次数