Size: a a a

F# Flood: Ручная работа

2020 February 12

VK

Vladislav Khapin in F# Flood: Ручная работа
Doge Shibu
А что значит z на конце второго Posint?
Может быть 0
источник

DS

Doge Shibu in F# Flood: Ручная работа
Vladislav Khapin
Может быть 0
Да, видимо
источник

AH

Ayrat Hudaygulov in F# Flood: Ручная работа
Shub Niggurath
   [<SuppressMessage("*", "TypeNames")>]
   type posint = private Posint of int
   with
       static member OfInt =
           Constrain.constrain (fun (n : int) ->
               if n > 0
               then Success (Posint n)
               else failf "Expected positive int, received %d" n)
       member this.Value = let (Posint v) = this in v

       // posint & int
       static member (+) (Posint p1, p2 : int) = p1 + p2
       static member (+) (p1 : int, Posint p2) = p1 + p2
       static member (*) (Posint p1, p2 : int) = p1 * p2
       static member (*) (p1 : int, Posint p2) = p1 * p2
       static member (-) (Posint p1, p2 : int) = p1 - p2
       static member (-) (p1 : int, Posint p2) = p1 - p2
       static member (/) (Posint p1, p2 : int) = p1 / p2
       static member (/) (p1 : int, Posint p2) = p1 / p2

       // posint & posint
       static member (+) (Posint p1, Posint p2) = Posint (p1 + p2)
       static member (-) (Posint p1, Posint p2) = p1 - p2
       static member (*) (Posint p1, Posint p2) = Posint (p1 * p2)
       static member (/) (Posint p1, Posint p2) = Posintz (p1 / p2)

       // posint & posintz
       static member (+) (Posint p1, Posintz p2) = Posint (p1 + p2)
       static member (-) (Posint p1, Posintz p2) = p1 - p2
       static member (*) (Posint p1, Posintz p2) = Posintz (p1 * p2)
       static member (/) (Posint p1, Posintz p2) = Posintz (p1 / p2)

       // posint & negint
       static member (+) (Posint p1, Negint p2) = p1 + p2
       static member (-) (Posint p1, Negint p2) = Posint (p1 - p2)
       static member (*) (Posint p1, Negint p2) = Negint (p1 * p2)
       static member (/) (Posint p1, Negint p2) = Negintz (p1 / p2)

       // posint & negintz
       static member (+) (Posint p1, Negintz p2) = p1 + p2
       static member (-) (Posint p1, Negintz p2) = Posint (p1 - p2)
       static member (*) (Posint p1, Negintz p2) = Negintz (p1 * p2)
       static member (/) (Posint p1, Negintz p2) = Negintz (p1 / p2)

   and
       [<SuppressMessage("*", "TypeNames")>]
       posintz = private Posintz of int
   with
       static member OfInt =
           Constrain.constrain (fun (n : int) ->
               if n >= 0
               then Success (Posintz n)
               else failf "Expected non-negative int, received %d" n)
       member this.Value = let (Posintz v) = this in v

       // posintz & int
       static member (+) (Posintz p1, p2 : int) = p1 + p2
       static member (+) (p1 : int, Posintz p2) = p1 + p2
       static member (*) (Posintz p1, p2 : int) = p1 * p2
       static member (*) (p1 : int, Posintz p2) = p1 * p2
       static member (-) (Posintz p1, p2 : int) = p1 - p2
       static member (-) (p1 : int, Posintz p2) = p1 - p2
       static member (/) (Posintz p1, p2 : int) = p1 / p2
       static member (/) (p1 : int, Posintz p2) = p1 / p2

       // posintz & posintz
       static member (+) (Posintz p1, Posintz p2) = Posintz (p1 + p2)
       static member (-) (Posintz p1, Posintz p2) = p1 - p2
       static member (*) (Posintz p1, Posintz p2) = Posintz (p1 * p2)
       static member (/) (Posintz p1, Posintz p2) = Posintz (p1 / p2)

       // posintz & posint
       static member (+) (Posintz p1, Posint p2) = Posint (p1 + p2)
       static member (-) (Posintz p1, Posint p2) = p1 - p2
       static member (*) (Posintz p1, Posint p2) = Posintz (p1 * p2)
       static member (/) (Posintz p1, Posint p2) = Posintz (p1 / p2)

       // posintz & negint
       static member (+) (Posintz p1, Negint p2) = p1 + p2
       static member (-) (Posintz p1, Negint p2) = Posint (p1 - p2)
       static member (*) (Posintz p1, Negint p2) = Negintz (p1 * p2)
       static member (/) (Posintz p1, Negint p2) = Negintz (p1 / p2)
Штоблять.
источник

DS

Doge Shibu in F# Flood: Ручная работа
Жуть какая-то. Но зачем?
источник

IC

Iλyα Che in F# Flood: Ручная работа
А где там дырки?
источник

VS

Vasily Shapenko in F# Flood: Ручная работа
Когда у тайп астронавтов начинается кислородное голодание, умирающий мозг рисует картины посмертных видений
источник

AH

Ayrat Hudaygulov in F# Flood: Ручная работа
Iλyα Che
А где там дырки?
В головах
источник

VS

Vasily Shapenko in F# Flood: Ручная работа
В головах там желе
источник

IC

Iλyα Che in F# Flood: Ручная работа
А почему нет проверок при сложении Negint и обычного int?
источник

VS

Vasily Shapenko in F# Flood: Ручная работа
Как у разумных амеб из романа Спектр Лукьяненко
источник

SN

Shub Niggurath in F# Flood: Ручная работа
Iλyα Che
А почему нет проверок при сложении Negint и обычного int?
а какая разница, код-то все равно мертвый
источник

IC

Iλyα Che in F# Flood: Ручная работа
Я пытаюсь найти логику.
источник

SN

Shub Niggurath in F# Flood: Ручная работа
логика такая: а ВДРУГ нам в БУДУЩЕМ потребуется неотрицательное целое, ВОТ ЧТО ТЫ БУДЕШЬ ТОГДА ДЕЛАТЬ, А?
источник

SN

Shub Niggurath in F# Flood: Ручная работа
ну впрочем вы еще equinox не видели, в котором на три строчки 5 самописных либ
источник

VS

Vasily Shapenko in F# Flood: Ручная работа
Shub Niggurath
логика такая: а ВДРУГ нам в БУДУЩЕМ потребуется неотрицательное целое, ВОТ ЧТО ТЫ БУДЕШЬ ТОГДА ДЕЛАТЬ, А?
Напишу пару строк кода
источник

IC

Iλyα Che in F# Flood: Ручная работа
Хм, uint?
источник

AH

Ayrat Hudaygulov in F# Flood: Ручная работа
Shub Niggurath
ну впрочем вы еще equinox не видели, в котором на три строчки 5 самописных либ
Не понял тебя сегодня.
источник

IC

Iλyα Che in F# Flood: Ручная работа
Хотя если понадобятся только неотрицательные чётные, то будут проблемы.
источник

IC

Iλyα Che in F# Flood: Ручная работа
Кажется, тут нужна фабрика.
источник

SN

Shub Niggurath in F# Flood: Ручная работа
Ayrat Hudaygulov
Не понял тебя сегодня.
equinox например не может распарсить json без логгинга. и не может подключиться к кафке без FsKafka
источник