Jadąc z C++, jestem przyzwyczajony, aby móc budować proste formy twierdzeń kompilacji, gdzie mógłbym emitują ostrzeżenia lub błędy podczas kompilacji, jeśli kilka prostych warunków (na przykład ponad prostych wyrażeń algebraicznych) nie zostały spełnione poprzez użytkowania szablon meta-programowanie i/lub cpp(1)
Asercje kompilacji z GHC Haskell?
na przykład, jeśli chciałem się upewnić, mój program kompiluje się tylko wtedy, gdy Int
ma przynajmniej pewną minBound
/maxBound
zakres lub alternatywnie, jeśli konwersja bez strat (jak w odwracalny) od Int64
do Int
jest możliwe z bieżącym celem kompilacji. Czy jest to możliwe w przypadku niektórych rozszerzeń GHC Haskell? Moim pierwszym przypuszczeniem byłoby użycie TH. Czy istnieją inne obiekty GHC, które można by wykorzystać w tym celu?
(Un) na szczęście nie istnieją typy zależne w Haskell, który byłby wielki do tego celu (ale które prawdopodobnie wymagają o wiele więcej można umieścić adnotacje typu). –
@Alexandre: Brzmi interesująco ... Czy mógłbyś wyjaśnić, w jaki sposób można używać typów zależnych, np. Określić, czy 'Int64' zmieści się w' Int' podczas kompilacji? – hvr
Typy zależne kodują pełnowymiarowy prover twierdzenia w systemie typu. Każda właściwość danych może być wyrażona w jej typie. – kamatsu