A General Programming language is a big complex system no matter what target audiences you are facing. Newcomers to your language wonder why the declaration syntax is different from the language they got prior experience of.
let average (xs: []f64) = reduce (+) 0.0 xs / r64 (length xs)
Comparing Objective Caml and Standard ML
f x y = (+) x y
-- eventually becomes
f = (+) -- eta reduce
-- The cons of this is it will introduces pointfree syntax, which
-- can be quite troblesome and hinder the readability of the code
-- influenced by Clean language
f : Int Int -> Int
f x y = 3
g y = f 3 y
-- unless it is
f : Int -> Int -> Int
g = f 3
-- tuple
t : (Int, Int)
t = (1, 0)
-- type abbreviations
type coordinate = (Int, Int)
dist : coordinate -> coordinate -> a
dist (x, y) (a, b) = (abs (x - a)) ^ 2 + (abs(y - b)) ^ 2
-- wait? Need to see the data wrapping semantics
-- sum type, enum
data Tree a
= Empty
| Node (Tree a) a (Tree a),
Tree.Empty
Tree.Node
-- product type, record
data Person = Person {
firstName : String,
lastName : String,
}
Person { firstName = "z", lastName = "p" }