I’ve read “The Habit Programming Language: The Revised Preliminary Report” (2010):
http://hasp.cs.pdx.edu/habit-report-Nov2010.pdf
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:
https://andrewkelley.me/post/unsafe-zig-safer-than-unsafe-rust.html
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