我正在尝试执行以下操作
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类型成员.
那么我的问题是,这可以在没有类型参数的情况下表达吗?
在更一般的上下文中,我正在探索类型成员可以用类型成员替换类型参数的程度,何时这样做是个好主意.
我正在学习函数式编程,并且有一些(可能很明显,但不适合我:))关于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)相同?是应用仿函数法还是其他原因?你能解释一下吗?
我正在使用RichTextFx的CodeArea来突出自定义迷你语言代码.
现在,在执行此代码时,我想在当前执行的行前面显示一个小箭头.我知道具体的行号,但行号标签不能发生任何事情.
由于github项目声称显示行号或断点切换作为一个功能,这可能不是很困难.但无法得到任何工作......
提前致谢
是否可以定义列表类型,其中每对连续元素满足某种关系(约束).例如,可以组成函数的函数列表:
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) 我可以sbt run回显它正在调用的确切java命令吗?
之前已经问过这个问题,但OP的问题在没有回答问题的情况下得到了解决,所以我再问一遍.
我有这个代码,我想改进:
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)
我想在以下方面对此进行改进:
partition返回类型,以便它表明Foo[B]第二个列表中没有吗?Foo类型参数T(即更改Foo为case class Foo(a: A) …scala ×4
shapeless ×2
breakpoints ×1
case-class ×1
dotty ×1
javafx ×1
line-numbers ×1
monads ×1
richtextfx ×1
sbt ×1
scalaz ×1
types ×1