小编Tom*_*ula的帖子

Case类构造函数参数类型,具体取决于前一个参数值

我正在尝试执行以下操作

trait Stateful {
  type State
}

case class SystemState(system: Stateful, state: system.State) // does not compile
Run Code Online (Sandbox Code Playgroud)

也就是说,类型state取决于(的值)system.但是,不支持:

非法依赖方法类型:参数出现在同一节中的另一个参数的类型或更早的参数中

使用函数参数,我可以将参数拆分为两个参数列表,这对于案例类构造函数是不可能的:

def f(system: Stateful)(state: system.State): Unit = {} // compiles
Run Code Online (Sandbox Code Playgroud)

我能做的最好的事情是:

case class SystemState[S](system: Stateful { type State = S }, state: S) // compiles
Run Code Online (Sandbox Code Playgroud)

但我认为没有类型参数应该是可能的,因为在dotty中,我认为类型参数是desugared类型成员.

那么我的问题是,这可以在没有类型参数的情况下表达吗?

在更一般的上下文中,我正在探索类型成员可以用类型成员替换类型参数的程度,何时这样做是个好主意.

scala case-class dotty dependent-type

14
推荐指数
1
解决办法
777
查看次数

解释免费monad列表与解释列表的免费monad

我正在学习函数式编程,并且有一些(可能很明显,但不适合我:))关于monad的问题.每个monad都是一个应用程序.应用仿函数又可以定义为高级类型如下(pure方法省略):

trait ApplicativeFunctor[F[_]]{
   def ap[A](fa: F[A])(f: F[A => B]): F[B]
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这个类型类意味着我们可以采用两个值F[A],F[B]一个函数(A, B) => C和构造F[C].

这个属性使我们能够构建列表反转功能:

def reverseApList[F[_]: ApplicativeFunctor, A](lst: List[F[A]]): F[List[A]] 
Run Code Online (Sandbox Code Playgroud)

我们拥有

trait SomeType[A]
Run Code Online (Sandbox Code Playgroud)

现在考虑

type MyFree[A] = Free[SomeType, A] 
val nt: NaturalTransformation[SomeType, Id]
val lst: List[MyFree[Int]]
Run Code Online (Sandbox Code Playgroud)

问题:为什么lst.map(_.foldMap(nt))reverseApList(lst).foldMap(nt)相同?是应用仿函数法还是其他原因?你能解释一下吗?

monads scala scalaz

8
推荐指数
1
解决办法
132
查看次数

在RichTextFx CodeArea中的行号处显示断点

我正在使用RichTextFx的CodeArea来突出自定义迷你语言代码.

现在,在执行此代码时,我想在当前执行的行前面显示一个小箭头.我知道具体的行号,但行号标签不能发生任何事情.

由于github项目声称显示行号或断点切换作为一个功能,这可能不是很困难.但无法得到任何工作......

提前致谢

javafx breakpoints line-numbers richtextfx

7
推荐指数
1
解决办法
1390
查看次数

列出连续元素的类型约束

是否可以定义列表类型,其中每对连续元素满足某种关系(约束).例如,可以组成函数的函数列表:

val f1: A => B = ???
val f2: B => C = ???
val f3: C => D = ???

type SafeList = ??? // how to define this?

val fs: SafeList = f1 :: f2 :: f3 :: HNil // OK

val fs: SafeList = f1 :: f3 :: HNil       // ERROR
Run Code Online (Sandbox Code Playgroud)

scala shapeless

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

sbt:显示run任务调用的java命令

我可以sbt run回显它正在调用的确切java命令吗?

之前已经问过这个问题,但OP的问题在没有回答问题的情况下得到了解决,所以我再问一遍.

sbt

5
推荐指数
1
解决办法
237
查看次数

Scala:基于类型的列表分区

我有这个代码,我想改进:

sealed abstract class A
case class B() extends A
case class C() extends A
case class D() extends A

case class Foo[+T <: A](a: T)

/** Puts instances that match Foo(B()) in the first list and everything else,
  * i.e. Foo(C()) and Foo(D()), in the second list. */
def partition(foos: List[Foo[_ <: A]]): (List[Foo[B]], List[Foo[_ <: A]]) = {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

我想在以下方面对此进行改进:

  1. 我可以更改其partition返回类型,以便它表明Foo[B]第二个列表中没有吗?
  2. 我可以摆脱Foo类型参数T(即更改Foocase class Foo(a: A) …

types scala shapeless

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