内容简介:Typed Racket是Racket语言的静态类型版本,使用Racket的宏独立写成,能够很好地证明racket的宏的强大。Typed Racket的设计更加偏向于与已有的Racket代码兼容而不是模仿Haskell或者Scala或者ML或者Shen的设计,它很好地做到了将untyped code与typed code的结合,每一个Type都有与之对应的contract。目前学习Typed Racket的最好教程依然是Typed Racket Guide和Typed Racket Reference,但
Typed Racket是Racket语言的静态类型版本,使用Racket的宏独立写成,能够很好地证明racket的宏的强大。Typed Racket的设计更加偏向于与已有的Racket代码兼容而不是模仿Haskell或者Scala或者ML或者Shen的设计,它很好地做到了将untyped code与typed code的结合,每一个Type都有与之对应的contract。
目前学习Typed Racket的最好教程依然是Typed Racket Guide和Typed Racket Reference,但是相信很多人看过之后依然会有一些疑问,依然会有一些不太懂的地方,毕竟这两个教程依然是比较简略的。我们这里将会补充一些关于Typed Racket的知识,充分发挥其威力,不过我建议先看上面那两个。
typed omega combinator
在typed racket中写出omega combinator需要一些技巧:
#lang typed/racket (: omega (All (a) (-> (All (b) (-> b a)) a))) (define (omega x) (x x))
细心的朋友可能注意到typed racket是天然支持RankNTypes的。
不过这个版本没有什么用处,因为(omega omega)也不能type check。
所以,我们应该这样写:
#lang typed/racket (define-type (w-type a) (-> (w-type a) a)) (: omega w-type) (define (omega x) (x x)) (omega omega)
完美!
Bound Qualification
同Haskell中的Bound Qualification,这里可以用intersection type实现同样的效果:
forall a.Num a=>a->a 等价于
(All (a) (-> (Intersection a Number) a))
ADT
这个写一个宏就行了:
#lang typed/racket
(require syntax/parse/define)
(define-simple-macro (define-datatype (typename:id typevars:id ...) (typecons:id [val (~literal :) types] ...) ...)
(begin (struct (typevars ...) typecons ([val : types] ...)) ...
(define-type typename (U typecons ...))))
(define-datatype (Bool)
(True) (False))
(define-datatype (Maybe a)
(Just [val : a])
(Nothing))
inst
(map cons '(1 2 3) '(2 3 4))
(map (lambda #:forall (a) ([x : a]) x) '(1 2 3))
这样简单的函数也是没有办法成功执行的,这是因为TR的类型推倒非常辣鸡,所以你应该显式的写出多态参数:
(map (inst cons Integer Integer) '(1 2 3) '(2 3 4))
(map (inst (lambda #:forall (a) ([x : a]) x) Integer) '(1 2 3))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript & jQuery
David Sawyer McFarland / O Reilly / 2011-10-28 / USD 39.99
You don't need programming experience to add interactive and visual effects to your web pages with JavaScript. This Missing Manual shows you how the jQuery library makes JavaScript programming fun, ea......一起来看看 《JavaScript & jQuery》 这本书的介绍吧!