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.

Futhark

let average (xs: []f64) = reduce (+) 0.0 xs / r64 (length xs)

StandardML/OCaml

Comparing Objective Caml and Standard ML

Haskell

Clean

Lean

Unison


Topos

Function declation

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

Type definitions

-- 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" }

Statement / Control flow