G Goat Language

Goat

Учебный функциональный язык программирования с деревообходящим интерпретатором, интерактивным REPL и полноценной стандартной библиотекой — реализован на F#.

fibonacci.goat
fun rec fib n =
  match n with
  | 0 => 0
  | 1 => 1
  | n => fib (n - 1) + fib (n - 2)

fun rec fibs a b =
  a :: lazy (fibs b (a + b))

let fibStream = fibs 0 1

fun main _ =
  io {
    do! println (show (take 10 fibStream))
  }

Возможности

λ

Функциональное ядро

Функции первого класса, замыкания, лямбды, частичное применение, каррирование и хвостовая рекурсия.

Ленивые вычисления

Явная ленивость через lazy / force. Бесконечные списки, потоки и коpекурсия.

Алгебраические типы

ADT с несколькими конструкторами, вложенные данные и исчерпывающий pattern matching с гардами.

IO

IO-монада

Блоки io { } с синтаксисом do! / let! для чистой работы с вводом-выводом.

📦

Стандартная библиотека

Option, Result, списочные комбинаторы, строковые функции и математика — написаны на самом Goat.

🔁

REPL и CLI

Интерактивная оболочка, команды run / check и Makefile для быстрого запуска.

Быстрый старт

1

Склонируйте репозиторий

git clone <repo-url>
cd funcpro-coursework-goatwhistle
2

Соберите проект

dotnet restore Goat.slnx
dotnet build Goat.slnx
3

Запустите REPL или программу

dotnet run --project src/Goat.Repl
dotnet run --project src/Goat.Cli -- run examples/factorial.goat
4

Или используйте Makefile

make repl
make run FILE=examples/fibonacci.goat
make test

Требования

ИнструментВерсия
.NET SDK10.0.x (или 8.0.x)
F#8+
ОСWindows / Linux / macOS

Команды Makefile

КомандаДействие
make buildКомпиляция
make test138 xUnit тестов
make replREPL
make run FILE=…Запуск файла
make examplesЗапуск всех примеров
make watchWatch-режим тестов
make cleanОчистка артефактов

Документация