Описание тега frege
Фреге - это Хаскель для JVM.
Как и любой Haskell, он является чисто функциональным, обладает сильной статической системой типов с глобальным выводом типов и не является строгой - также известной как ленивая - оценка.
Frege компилируется в Java, работает на JVM и использует любую библиотеку Java по вашему желанию. Он может быть использован внутри любого проекта Java.
Вкус Фреге
Привет, мир
Это классический стартер с небольшим расширением, демонстрирующий свободное использование Java и преимущества системы типов, способной распознавать чистоту.
module Hello where
greeting friend = "Hello, " ++ friend ++ "!"
main args = do
println (greeting "World")
Этот код будет компилироваться в Hello.class и Hello.java с обычным основным методом Java, который можно запустить обычным способом Java.
Кроме того, у Hello.class будет метод
public static String greeting(String ...) {...}
что можно позвонить из Java или любого другого языка JVM.
Функция приветствия является чистой, то есть она не имеет состояния и не имеет побочных эффектов. Следовательно, он является потокобезопасным, и его результаты могут автоматически кэшироваться, поскольку при наличии одного и того же аргумента результат всегда будет одинаковым.
Основная функция нечистая. Он принимает список строк и возвращает не просто void, как в большинстве других языков JVM, но тип IO (), что говорит о том, что он может вызывать побочные эффекты, такие как печать на консоль. Система типов Фреге гарантирует, что любой вызывающий абонент main также должен быть некоторого типа IO и, таким образом, также помечен как нечистый. Таким образом, отсутствие чистоты пронизывает всю цепочку вызовов.
"Hello World" уже показывает принцип "островов чистоты" (приветствия) в "море императивного кода" (основной).
Поскольку информация о чистоте передается через систему типов, компилятор потенциально может использовать ее для многих оптимизаций, таких как предварительный расчет, отложенное выполнение, параллельное выполнение, кэширование и устранение общих подвыражений.
Полезные ссылки
- Начиная
- Попробуйте Frege прямо из вашего браузера
- совместимость:
- Различия между Фреге и Хаскеллом
- Поддержка IDE
- Инструменты сборки