169 похожих чатов

А как я могу в хаскеле определить функцию которая будет

принимать только четные числа? хочу проверки на этапе компиляции

7 ответов

13 просмотров

> :set -XScopedTypeVariables > :set -XDataKinds > :set -XTypeFamilies > :set -XAllowAmbiguousTypes > :m + GHC.TypeLits > type IsEven n = Mod n 2 ~ 0 > foo :: forall n. (KnownNat n, IsEven n) => Integer; foo = natVal (Proxy @n) + 1 > foo @6 7 > foo @7 <interactive>:40:1: error: • Couldn't match type ‘1’ with ‘0’ arising from a use of ‘foo’ • In the expression: foo @7 In an equation for ‘it’: it = foo @7

newtype Even = Even Int toInt (Even n) = n * 2 fromInt n = if mod n 2 /= 0 then error "Can't construct Even" else Even $ n / 2 foo : Even -> ... foo n = ... $ toInt n чётность гарантируется. хотя можно даже без деления

Danil Berestov
> :set -XScopedTypeVariables > :set -XDataKinds ...

type family Even (n :: Nat) where Even 0 = 'True Even 1 = 'False Even n = Even (n - 2) Можно такой самопал, но он ломается на больших чиселках (даже не знаю, как его исправить, не прибегая к помощи GHC.TypeLits)

Критерий Вычисλимости
newtype Even = Even Int toInt (Even n) = n * 2 fro...

Нет, конечно не гарантируется, чётность оригинального числа никто не энфоосит

Gentle Rabbit
Нет, конечно не гарантируется, чётность оригинальн...

точно так же, как при построении рафинированного значения

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Слушайте, ещё такая интересная задачка. Сделан аудит действий пользователей через триггеры в базе, соответственно каждый пользователь имеет свой логин и пароль в базе. Это пре...
Сергей Бычков
12
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
вопрос по москвину - не понимаю вот такого вопроса похоже Сколько разных всегда завершающихся функций с типом a -> a -> b -> a -> a можно реализовать? Две функции одинаково...
Fedor
11
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
Утра доброго. Просветите пожалуйста. Хочу сделать rest сервер на делфи. Посмотрел 3 фреймворка: dmvc, Mars, mormot. Ни в одном из них не упоминается ассинхронная обработка вхо...
Сергей Бычков
10
Как попросить stack install делать executable без .exe на винде?
Danila Danko
9
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
возможно для форматирования TimeStampZ нужен другой механизм, не?
Роман Лях (rgreat)
13
Карта сайта