А что, если бы операции List[A].head
и List[A].tail
в Scala были бы безопасными на этапе компиляции?
В один ноябрьский вечер я задался этим вопросом, и, обладая нулевыми знаниями по метапрограммированию, принялся реализовывать список SList[A, N]
с известным на этапе компиляции размером. Даже for-comprehension в итоге получилось реализовать!
Как это получилось сделать и какими средствами языка? Если рассказывать подробно - долгая история.