core.typed
This repository has moved:Leiningen dependency (Clojars):
[typed "0.1.6"]
Typed Clojure
Gradual typing in Clojure, as a library.
[Talk] Clojure Conj 2012
Documentation
See wiki.
License
Typed Clojure is released under the same license as Clojure: Eclipse Public License v 1.0.
See LICENSE
.
Changelog
0.1.6
-
Ensure
Result
is not introduced when performing type inference on drest fn apps -
tc-ignore
is more do-like.Workaround for a quirk in the Clojure compiler where protocols only get generated in a top-level
do
.
(identity (do (def-protocol foo (bar [this]))
bar)) ;; <-- bar cannot be resolved
vs.
(do (def-protocol foo (bar [this]))
bar) ;; <-- bar is resolvable
(patch by Stephen Compall, issue #3)
- Fix typo in
into-array
logic (patch by Stephen Compall, issue #4) into-array>
generalises Java types, does not need redundant type annotations. See User Documentation in wiki.- Improve type of
clojure.core/class
. (class ) is always a Class (class nil) is always a nil - Move documentation to wiki.
0.1.5
- Better errors for Java methods and polymorphic function applications, borrow error messages from Typed Racket
- Change
ann-datatype
,ann-protocol
,ann-pprotocol
syntax to be flatter (ann-protocol pname method-name method-type ...) (ann-dataype dname [field-name :- field-type ...]) - Add
defprotocol>
0.1.4
- Support Clojure 1.4.0+
- Better errors, print macro-expanded form from AST
0.1.3
- Refactor typed.core into individual files
- Add
method-type
(method-type 'java.io.File/getName)
prints the current Typed Clojure type for the getName method of File
- Add types for some clojure.core coersion functions
- Preliminary support for ClojureScript
0.1.2
- Fix objects and filters being lost during polymorphic and dotted function applications
- Add tests for (if (seq a) (first a) 0) filter example.
- Can annotate datatypes outside current namespace
- Improve type of
seq
,next
,conj
- tc-pr-env -> print-env
- tc-pr-filters -> print-filterset
- Alter APersistentMap
- Check that local binding occurrences match with expected types
- Heterogeneous maps are APersistentMap's instead of IPersistentMap's
- Heterogeneous vectors are APersistentVector's instead of IPersistentVector's
0.1.1
- Ensure
ann-form
finally checks its expression is of the expected type - Improve simplifying of intersections involving Java classes
Quickstart
(typed.core/ann v t)
gives var v
the static type t
.
(typed.core/ann-form f t)
ensures form f
is of the static type t
.
(typed.core/check-ns)
type checks the current namespace.
(typed.core/cf t)
type checks the form t
.
Examples
(These don't completely type check yet)
- typed.test.rbt for examples of mutually recursive types and heterogenous maps
- typed.test.core-logic for examples of typing (tightly coupled) datatypes and protocols
- typed.test.example for a few little examples of simple usage
Future work
- Equality filters for occurrence typing
- Type check multimethods
- Rest type checking in fn definition
- Type check defprotocol definitions
- Unify AST with ClojureScript
- Namespace dependency management
Contributors
Stephen Compall (S11001001)