在关于Haskell类型类的PDF演示文稿中,幻灯片#54有这样一个问题:
公开问题:
在具有泛型和受约束的多态性的语言中,您是否也需要子类型?
我的问题是:
泛型和约束多态如何使子类型不必要?
如果泛型和约束多态不需要子类型,为什么Scala有子类型?
oop haskell programming-languages functional-programming scala
我已多次读过Haskell中的懒惰评估有时会导致空间泄漏.什么样的代码会导致空间泄漏?如何检测它们?并且程序员可以采取哪些预防措施来避免它们?
哪些功能some和many在Alternative类型类有用吗?Docs提供了一个我无法理解的递归定义.
在使用Scala 2.7.3编译以下代码时,
package spoj
object Prime1 {
def main(args: Array[String]) {
def isPrime(n: Int) = (n != 1) && (2 to n/2 forall (n % _ != 0))
val read = new java.util.Scanner(System.in)
var nTests = read nextInt // [*]
while(nTests > 0) {
val (start, end) = (read nextInt, read nextInt)
start to end filter(isPrime(_)) foreach println
println
nTests -= 1
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下编译时错误:
PRIME1.scala:8: error: illegal start of simple expression
while(nTests > 0) {
^
PRIME1.scala:14: error: …Run Code Online (Sandbox Code Playgroud) 保罗格雷厄姆的第四个要点是什么使Lisp不同说,
9.整个语言随时可用.
读取时间,编译时和运行时之间没有真正的区别.您可以在编译时编译或运行代码,同时在运行时读取或编译代码.
在读取时运行代码允许用户重新编程Lisp的语法; 在编译时运行代码是宏的基础; 在运行时编译是Lisp在Emacs等程序中用作扩展语言的基础; 并且在运行时读取使程序能够使用s表达式进行通信,这一想法最近被重新发明为XML.
Clojure的最后一个要点是否适用?
我以前见过这种代码很多次,最近一次是在scala-user邮件列表中:
context(GUI) { implicit ec =>
// some code
}
Run Code Online (Sandbox Code Playgroud)
context 定义为:
def context[T](ec: ExecutionContext)(block: ExecutionContext => T): Unit = {
ec execute {
block(ec)
}
}
Run Code Online (Sandbox Code Playgroud)
implicit当keeyword 置于lambda表达式参数前面时,它的目的是什么?
Play JSON API生成的错误消息的示例:
scala> import play.api.libs.json._
import play.api.libs.json._
scala> Json.obj("k" -> Json.obj("m" -> 7))
res0: play.api.libs.json.JsObject = {"k":{"m":7}}
scala> (res0 \ "p").as[String]
play.api.libs.json.JsResultException: JsResultException(errors:List((,List(ValidationError(validate.error.expected.jsstring,WrappedArray())))))
at play.api.libs.json.JsValue$$anonfun$2.apply(JsValue.scala:67)
at play.api.libs.json.JsValue$$anonfun$2.apply(JsValue.scala:67)
at play.api.libs.json.JsResult$class.fold(JsResult.scala:69)
at play.api.libs.json.JsError.fold(JsResult.scala:10)
at play.api.libs.json.JsValue$class.as(JsValue.scala:65)
at play.api.libs.json.JsUndefined.as(JsValue.scala:98)
at .<init>(<console>:12)
at .<clinit>(<console>)
at .<init>(<console>:7)
// gazillion lines more
scala> (res0 \ "k" \ "m").as[String]
play.api.libs.json.JsResultException: JsResultException(errors:List((,List(ValidationError(validate.error.expected.jsstring,WrappedArray())))))
at play.api.libs.json.JsValue$$anonfun$2.apply(JsValue.scala:67)
at play.api.libs.json.JsValue$$anonfun$2.apply(JsValue.scala:67)
at play.api.libs.json.JsResult$class.fold(JsResult.scala:69)
at play.api.libs.json.JsError.fold(JsResult.scala:10)
at play.api.libs.json.JsValue$class.as(JsValue.scala:65)
at play.api.libs.json.JsNumber.as(JsValue.scala:108)
at .<init>(<console>:12)
at .<clinit>(<console>)
at .<init>(<console>:7)
// gazillion lines more
Run Code Online (Sandbox Code Playgroud)
有没有办法从这个API中获得更好的错误消息?例如,对于上述两种情况中的错误消息可能看起来像No value found …
我正在从LearnYouSomeErlang网络书籍学习Erlang.在学习的过程中,有一件事让我印象深刻的是非短路布尔连接和分离算子即可; and和or.这些运营商有哪些用例?你为什么要用它们而不是andalso和orelse?
erlang programming-languages functional-programming logic-programming
如何组合返回Validations的两个函数?以下是我的尝试不起作用:
scala> def f: Int => Validation[String, Int] = i => if(i % 2 == 0) Success(i * 2) else Failure("Odd!")
f: Int => scalaz.Validation[String,Int]
scala> def g: Int => Validation[String, Int] = i => if(i > 0) Success(i + 1) else Failure("Not positive!")
g: Int => scalaz.Validation[String,Int]
scala> kleisli(f) >=> kleisli(g)
<console>:16: error: no type parameters for method kleisli: (f: A => M[B])scalaz.Kleisli[M,A,B] exist so that it can be applied to arguments (Int => scalaz.Validation[String,Int])
--- because ---
argument …Run Code Online (Sandbox Code Playgroud)