Ex Type Save

A type checker for Elixir

Project README

ExType

A type checker for Elixir.

Feature

  • gradual typing
  • type check for protocols and generic protocols
  • type check with intersection and union types
  • type guards
  • type assertion
  • type inspection

Installation

The package can be installed by adding ex_type to your list of dependencies in mix.exs:

def deps do
  [
    # Required developement dependency
    {:ex_type, "~> 0.5.0", only: :dev, runtime: false},

    # Optional runtime dependency
    {:ex_type_runtime, "~> 0.2.0"}
  ]
end

Rules

To help ExType infer types, following rules are required:

  1. All public functions require explicit typespecs.

  2. All recursive functions require explicit typespecs.

Basically, you do not need to add a typespec for non-recursive private functions.

Usage

# type check for all code
$ mix type

# type check for specified module
$ mix type ExType.Example.Foo

# type check for specified named function
$ mix type ExType.Example.Foo.hello

# type check for named function with specified arity
$ mix type ExType.Example.Foo.hello/0

Example

There are some examples in lib/ex_type/example/ directory.

Status

This project is still in a very early stage with active development. You are likely to hit uncovered cases when playing more complex code beyond the examples. Be free to submit a github issue for a bug report or any feedback.

Roadmap

Plan to apply ExType to following small-sized libraries first:

Development Note

  • Use MIX_ENV=test iex -S mix to access test context.

  • It uses serveral Elixir private APIs. It should be ok for now because ex_type is a development dependency, not a runtime dependency. Would like to reduce private API usage at later time when the project is more mature.

License

MIT

Open Source Agenda is not affiliated with "Ex Type" Project. README Source: gyson/ex_type
Stars
33
Open Issues
32
Last Commit
1 year ago
Repository
License
MIT

Open Source Agenda Badge

Open Source Agenda Rating