I’ve read “The Habit Programming Language: The Revised Preliminary Report” (2010):
It’s another Haskell variant meant for system programming. Like Idris it fixes some Haskell design mistakes, but also adds lots of stuff for low level coding. I don’t think average C programmers will switch to a very Haskell-like language like this, but it shows some interesting (for me) ideas.
“Figure 1: Standard Habit Types” at page 16 shows that its reference types have optionally alignment too:
ARef l a references to memory areas of type a with alignment l Ref a references with default alignment APtr l a pointers to memory areas of type a with alignment l Ptr a pointers with default alignment
This is like in Zig language:
Sometimes I miss that information in the Rust type system (and I used to miss it in the D language type system too).
“Figure 2: Standard Habit Type Classes” at page 19 and “Figure 3: Standard Habit Type Functions” at page 21 show that its integer generics are quite powerful (Rust constant generics will enjoy this power):
n <= m type-level number comparison: n is less than or equal to m n < m type-level number comparison: n is less than m n + m = p p is the sum of n and m n - m = p p is the difference of n and m n * m = p p is the product of n and m n / m = p p is the result of dividing n by m, with no remainder n ^ m = p p is the result of raising n to the power m GCD n m = p p is the greatest common divisor of n and m
Figure 2 also shows the handling of memory initialization:
Initable a areas of type a have a default initializer NoInit a areas of type a do not require initialization NullInit a areas of type a can be null-initialized