Speaking from experience, zero.
> debug
But the whole point of a good compiler is that it tells you when you're wrong! (Instead of having to write hundreds of tests (and thousands of Node test runners).)
> :> and :
You can just treat them as syntax, like the largest proportion of every other language, but with the opportunity of actually being able to write things like that yourself later.
Observe:
type API = "polls" :> Get '[JSON] [Poll]
: "polls" :> Capture "question_id" Int :> Get '[JSON] Poll
: "polls" :> Capture "question_id" Int :> "results" :> Get '[JSON] PollResults
The :> operator separates parts of a path, and the : separates different URL patterns. This is the equivalent of this API from the Django documentation:
urlpatterns = [
# ex: /polls/
url(r'^$', views.index, name='index'),
# ex: /polls/5/
url(r'^(?P[0-9]+)/$', views.detail, name='detail'),
# ex: /polls/5/results/
url(r'^(?P[0-9]+)/results/$', views.results, name='results')
]
The only difference is it has less regexes in it, is capable of being checked for nonsense by a compiler much smarter than me, and gives you the aforementioned "server for free". I have had URL pattern-match errors with Django in the past, and having your compiler check that there aren't any is excellent.
Easier to maintain? Check.
Easier to read? Check. (If nothing, because of the lack of regexes.)
Defines the response type too? Check.
Easy to refactor? Check! Tired of typing "polls" at the beginning? Just lift it out: turn
type API = "polls" :> Get '[JSON] [Poll]
: "polls" :> Capture "question_id" Int :> Get '[JSON] Poll
: "polls" :> Capture "question_id" Int :> "results" :> Get '[JSON] PollResults
into
type API = "polls" :>
( Get '[JSON] [Poll]
: Capture "question_id" Int :> Get '[JSON] Poll
: Capture "question_id" Int :> "results" :> Get '[JSON] PollResults
)
Types are first-class :)
> How many PhDs does one require to understand/correct/debug all the :> and : etc.?
Definitely less than it takes to become comfortable with the quirks of literally everything in JS: perhaps you should give something an honest shot before telling people who have derived real-world benefits from using it in production that it's useless?