Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala类型编程资源_Scala_Types - Fatal编程技术网

Scala类型编程资源

Scala类型编程资源,scala,types,Scala,Types,根据,Scala的类型系统是。有哪些资源可以让新手利用类型级编程的强大功能 以下是我迄今为止找到的资源: 这些资源很好,但我觉得我缺少基础知识,所以没有建立坚实的基础。例如,哪里有类型定义的介绍?我可以对类型执行哪些操作 有什么好的介绍性资源吗?有源代码、wiki和示例。除了这里的其他链接,还有我关于Scala中类型级元编程的博客文章: 概述 类型级编程与传统的值级编程有许多相似之处。但是,与值级编程不同,值级编程在运行时进行计算,而类型级编程则在编译时进行计算。我将尝试在

根据,Scala的类型系统是。有哪些资源可以让新手利用类型级编程的强大功能

以下是我迄今为止找到的资源:

这些资源很好,但我觉得我缺少基础知识,所以没有建立坚实的基础。例如,哪里有类型定义的介绍?我可以对类型执行哪些操作


有什么好的介绍性资源吗?

有源代码、wiki和示例。

除了这里的其他链接,还有我关于Scala中类型级元编程的博客文章:


    • 概述

      类型级编程与传统的值级编程有许多相似之处。但是,与值级编程不同,值级编程在运行时进行计算,而类型级编程则在编译时进行计算。我将尝试在值级别的编程和类型级别的编程之间进行比较

      范例

      类型级编程有两种主要范式:“面向对象”和“函数式”。从这里链接到的大多数示例都遵循面向对象的范例

      在apocalisp中可以找到一个很好的、相当简单的面向对象范例中的类型级编程示例,如下所示:

      // Abstract trait
      trait Lambda {
        type subst[U <: Lambda] <: Lambda
        type apply[U <: Lambda] <: Lambda
        type eval <: Lambda
      }
      
      // Implementations
      trait App[S <: Lambda, T <: Lambda] extends Lambda {
        type subst[U <: Lambda] = App[S#subst[U], T#subst[U]]
        type apply[U] = Nothing
        type eval = S#eval#apply[T]
      }
      
      trait Lam[T <: Lambda] extends Lambda {
        type subst[U <: Lambda] = Lam[T]
        type apply[U <: Lambda] = T#subst[U]#eval
        type eval = Lam[T]
      }
      
      trait X extends Lambda {
        type subst[U <: Lambda] = U
        type apply[U] = Lambda
        type eval = X
      }
      
      这里有一个自然数的peano编码。也就是说,每个非负整数都有一个类型:0的一个特殊类型,即
      \u0
      ;并且每一个大于零的整数都有一种形式为
      Succ[a]
      ,其中
      a
      是表示较小整数的类型。例如,表示2的类型将是:
      such[such[\u 0]]
      (后续项应用于表示零的类型两次)

      我们可以将各种自然数别名,以便更方便地参考。例如:

      type _3 = Succ[Succ[Succ[_0]]]
      
      (这非常类似于将
      val
      定义为函数的结果。)

      现在,假设我们想要定义一个值级函数
      def-toInt[T:T2
      • ,Scala中的类型级元编程库

      正如推特上所建议的那样:由迈尔斯·萨宾撰写。

      就我个人而言,我认为想在Scala中进行类型级编程的人已经知道如何在Scala中进行编程是很合理的。即使这意味着你链接到的那些文章我一个字也不懂:-)我只是想对有趣的博客说声谢谢;我一直在思考n关注它一段时间,特别是上面提到的最后一篇文章,加深了我对面向对象语言的类型系统应该具有的重要属性的理解。所以,谢谢!
      type _3 = Succ[Succ[Succ[_0]]]
      
      class TypeToValue[T, VT](value : VT) { def getValue() = value }
      
      implicit val _0ToInt = new TypeToValue[_0, Int](0)
      implicit def succToInt[P <: Nat](implicit v : TypeToValue[P, Int]) = 
           new TypeToValue[Succ[P], Int](1 + v.getValue())
      
      def toInt[T <: Nat](v : T)(implicit ttv : TypeToValue[T, Int]) : Int = ttv.getValue()
      
      val z:_0 = null
      val y:Succ[_0] = null