@alpacalang
Static Typing on the BEAM
@alpacalang
Who am I?
j14159
Director of Platform Engineering
@alpacalang
What Is Alpaca?• Statically Typed
• Functional
• http://alpaca-lang.org
@alpacalang
What Is Alpaca?• Type inference (Hindley-Milner)
• ML-family inspired
• Trying to stay simple and obvious
• Started January 2016, open-sourced June
@alpacalang
It is not…• Standard ML
• OCaml
• Haskell
@alpacalang
Doesn’t care about…• Higher kinded types
• Dependent typing
• Effect typing
• Ad-hoc polymorphism (e.g. typeclasses)
@alpacalang
A masochist’s guideto learning
Damas-Hindley-Milner
@alpacalang
Why (build it)?
@alpacalang
❤ Erlang
❤ Static Typing
@alpacalang
Types and patterns
@alpacalang
Types and patterns
@alpacalang
Uh-oh…
@alpacalang
Testing
@alpacalang
Stealing from Erlang❤ Erlang
❤ Pattern matching
❤ Tests
@alpacalang
Static typing
CC0
Chri
stop
h Br
aun
@alpacalang
Tests and Types
CC BY-SA 2.5, https://commons.wikimedia.org/w/index.php?curid=10407097
@alpacalang
Algebraic Data Types (ADTs)
❤ pattern matching
tests
@alpacalang
Actual Alpaca
@alpacalang
Actual Alpaca
@alpacalang
What’s important?
@alpacalang
Safety
CC0
Chri
stop
h Br
aun
@alpacalang
Utility
Copy
righ
t St
eve
Bran
am, cl
oseg
rain
.com
@alpacalang
Simplicity
CC-B
Y-SA
3.0
Jan
ekpf
eife
r
@alpacalang
Why…?• Target BEAM?
• Borrow from ML?
@alpacalang
Why BEAM?• VM
• Core Erlang
@alpacalang
Why ML?
Brevity
@alpacalang
Unification
@alpacalang
And a few similarities
Some Differences
@alpacalang
Some differences
@alpacalang
Don’t like it. Not one bit.
Any
@alpacalang
We hates it
@alpacalang
Matching
@alpacalang
Matching
@alpacalang
Type tests
@alpacalang
Type tests
@alpacalang
Clauses
@alpacalang
Clauses
@alpacalang
Clauses
@alpacalang
Clauses
@alpacalang
My favourites• typed messages
• records with row polymorphism
@alpacalang
Typed Messages
@alpacalang
Erlang
@alpacalang
Alpaca
@alpacalang
receiver 'message_type 'return_type
@alpacalang
receiver 'message_type 'return_type
pid 'message_type
@alpacalang
Receivers
@alpacalang
Receivers
@alpacalang
Receivers
@alpacalang
Receivers
@alpacalang
Receivers
@alpacalang
Receivers
@alpacalang
unify(int, receiver atom int)
receiver atom int
@alpacalang
Receivers
@alpacalang
Receivers
@alpacalang
unify(A, receiver B C)
receiver B A
@alpacalang
Spawning
@alpacalang
pid ‘a
@alpacalang
Spawning
@alpacalang
No receiver?
@alpacalang
Row polymorphism!
Records
@alpacalang
Row polymorphism
@alpacalang
Row polymorphism
@alpacalang
Row polymorphism
@alpacalang
Row polymorphism
@alpacalang
Row polymorphism
@alpacalang
Transformations
@alpacalang
Transformations
@alpacalang
Trade-offs
@alpacalang
Processes
CC-B
Y-SA
4.0
Seo
ul M
etro
poli
tan
Fire
& D
isas
ter
Head
quar
ters
@alpacalang
Code Reloading
CC-B
Y 2.
0 Ro
bert
Fre
iber
ger
@alpacalang
OTP Interop?
CC-B
Y-SA
3.0
Mag
nus
Mans
ke
@alpacalang
Compiler StructureFront End
AST Generation
Back End
@alpacalang
Compiler Back EndTyper
Match Exhaustiveness
Code Generation
@alpacalang
Compiler Back Endmodule_name.alp
alpaca_module_name.beam
@alpacalang
Code of Conduct v1.4
Contributor Covenant
@alpacalang
Contributors
@alpacalang
Accessibility
@alpacalang
Growth
CC-B
Y-SA
3.0
Dor
otan
m
@alpacalang
Communicating• https://github.com/alpaca-lang
• #alpaca-lang on freenode.net
• Google Group https://groups.google.com/forum/#!forum/alpaca-lang
@alpacalang
Where to help?
CC-B
Y-SA
3.0
Myk
ola
Swar
nyk
@alpacalang
Community Projects• rebar3 plugin
• Alpaca shell
• emacs mode
• VSCode extension
@alpacalang
Where to help?• standard library
• tooling (editors, etc)
• module system ideas
@alpacalang
Where to help?• Alpaca examples
• libraries using the FFI
• documentation
• participate in feature discussions
• use it and break it! We like finding bugs!
@alpacalang
Where to help?
CC-B
Y-SA
3.0
Myk
ola
Swar
nyk
@alpacalang
More details?• Language tour:https://github.com/alpaca-lang/alpaca/blob/master/Tour.md
• Where the typer started:http://okmij.org/ftp/ML/generalization.html
• Row polymorphism:https://www.cs.cmu.edu/~neelk/rows.pdf