Я по-тихоньку прохожу туториал по рогаликам на rltk там используется specs Но не думаю что это канонический пример использования Наверное канонической должна считаться книжка по Specs (по крайней мере я так думал)
Идея такая: Пользователь пишет только выражения состоящие из атомов и кортежей как литералов, вызовов функций и биндингов с паттерн-матчингом. По сути функция есть биндинг с аргументами. Типы пользователь не определяет, НО Для любого множества аргументов функции есть множество результатов функции. Такие множества и есть как бы типы. То есть если я написал функцию
let foo a = a + 1
то "тип" foo integer - integer а тип foo 2 - 3 a тип foo "bla" - !
Но часто тебе нужно не определять функцию по ретурнам а наоборот определять ее по сигнатуре
Ну так это при вызове указывается, и по сути ты уточнил тип правой части выражения, для того чтобы было понятно что упадёт в левую. Но мне опять же кажется что в труъ бестиповом языке который предложил Роман такой ситуации возникать не будет никогда