() -> Unit. Но на деле это не так. Я понимаю, что тут дело в системе типов и в том, что Unit имеет значение (хотя и бессмысленное с практической точки зрения), но есть ли в теории типов какие-нибудь трюки, чтобы равенство выше оказалось истинным?
Unit - это вполне конкретный тип/объект, синглтон, он не может стать "ничем"
А второе точно не тюпл из 0 элементов 🌚?
Да, с практической точки зрения эти типы измоморфны: val <T> (() -> T).morph: (Unit) -> T get() = { this() } val <T>((Unit) -> T).morph: () -> T get() = { this(Unit) } Можно показать, что морфизм выше биективен, то есть декларирует взаимно однозначное соответствие между значениями типа () -> T и значениями типа (Unit) -> T В Хаскеле обычно тип юнит и единственное значение этого типа выглядят так: (), но можно объявить свой юнит и типы () -> T и Unit -> T будут разными (для компилятора), хотя и изоморфными.
Вообще интуитивно кажется, что это и должно быть двумя разными типами 0 параметров и 1 параметр И хотя этот параметр Unit, но тем не менее
Обсуждают сегодня