@haskellru

Страница 415 из 1551
Andrew
19.09.2017
18:52:56
( не успел

Alexander
19.09.2017
18:52:59
что такое Solution ?

блин что за игры в угадайку с тайпчеккером : (

Andrew
19.09.2017
18:54:01
Complex a

Google
Andrew
19.09.2017
18:54:13
опечатка

Alexander
19.09.2017
18:54:19
да

но все ж поняли

Hot
19.09.2017
18:54:38
t уже убрал там

Опечатку

Solution сейчас покажу

data Solution a = OneSolution a | TwoSolutions a a | NoSolutions deriving (Show)

Pig
19.09.2017
18:55:05
Но ведь Complex это не тайпкласс?

Andrew
19.09.2017
18:55:20
Посоветуйте книгу после Learn Haskell for great good пожалуйста

Pig
19.09.2017
18:55:20
https://hackage.haskell.org/package/base-4.10.0.0/docs/Data-Complex.html#t:Complex

Alexander
19.09.2017
18:55:41
Prelude Data.Complex> :i Complex data Complex a = !a :+ !a -- Defined in ‘Data.Complex’

а почему Complex должен быть классом типов?

Google
Alexander
19.09.2017
18:56:20
ааа

не обратил внимание

Vasiliy
19.09.2017
18:56:42
Посоветуйте книгу после Learn Haskell for great good пожалуйста
RWH - старая, но основные вещи по-прежнему актуальны http://book.realworldhaskell.org/read/

Alexander
19.09.2017
18:56:44
видимо это квадратные уравнения?

хотя нет

там всегда TwoSolutions в комплексных

видимо имелось ввиду f :: Floating a => a -> a -> a -> Solution (Complex a)

s/имелось/хотелось/

Vasiliy
19.09.2017
18:59:53
а вообще, после LYAH, как мне кажется, любая литература пойдёт, пушо в нём кроме смешных картинок особо информации нет..

Andrew
19.09.2017
19:05:15
Спасибо!

Alexander
19.09.2017
19:06:15
вон у Брагилевского серия обзоров была недавно

Artem
19.09.2017
19:08:15
Курс на степике?

Hot
19.09.2017
19:16:18
solveEquation :: (Floating a, Ord a) => a -> a -> a -> Solution (Complex a)

Так тоже не пашет.

Ну я понял, что Complex - не тайпкласс.

Но я хз теперь, как извернуться.

Суть в том, что я пытаюсь добавить поддержку комплексных корней в свой старый учебный Haskell-проект: https://github.com/kosc/sqrteq/blob/master/Main.hs

И пока безуспешно.

Нашёл конструктор комплексных чисел, методы работы с ними.

Убедился, что корень извлекается из какого-нибудь (-4) :+ 0

Google
Vasiliy
19.09.2017
19:27:17
я взял код, добавил import Data.Complex, добавил Complex в сигнатуру, получил вот что

Hot
19.09.2017
19:27:46
Ошибка основана на несоответствии типов.

Vasiliy
19.09.2017
19:27:51
Expected type: Solution (Complex a) Actual type: Solution a • In the expression: OneSolution alone

посмотрел на соответствующую строку - и правда, alone у нас (Floating a, Ord a) => a, а ему нужно Complex a

дальше рассказывать не буду

Hot
19.09.2017
19:31:17
https://dpaste.de/Ge0d

У меня какая-то более геморойная ошибка, хотя сделал вроде всё тоже самое, не?

А, ок

Vasiliy
19.09.2017
19:31:59
та же самая - строки 49-51

Hot
19.09.2017
19:32:04
Вижу

Vasiliy
19.09.2017
19:33:25
и вон на 69 строке видно, что alone :: a

а в сигнатуре-то написано Complex a

Hot
19.09.2017
19:37:04
((- c) :+ 0) / b

Так по идее там должно быть Complex a

• In the second argument of ‘(/)’, namely ‘b’ In the expression: ((- c) :+ 0) / b In an equation for ‘alone’: alone = ((- c) :+ 0) / b Почему? В Prelude он как нефиг делит Complex на Floating.

Alexander
19.09.2017
19:38:10
чего?!

может там написано было (c::Complex) /2

Hot
19.09.2017
19:40:05
Там - это где?

Prelude Data.Complex> (2 :+ 1) / 3.2 0.6249999999999999 :+ 0.31249999999999994

Google
Hot
19.09.2017
19:40:22
Вот из прелюдии.

Вроде на одной стороне - Complex, на другой - Floating.

Или я неправ?

Alexander
19.09.2017
19:40:47
не прав

Floating это класс типов, Complex это тип

поэтому 3.2 имеет тип Complex Double тут

Hot
19.09.2017
19:41:15
Аааа, окей.

Alexander
19.09.2017
19:41:17
т.к. Complex Double является Floating

в примере нужно realToFrac натравить на b

Hot
19.09.2017
19:41:40
Ну а почему я не могу Complex Double на Double поделить-то?

Ааа

Ок

А в чём суть?

Alexander
19.09.2017
19:42:15
суть в том, что деление: (/) :: Fractional a => a -> a -> a

оба аргумента имеют один и тот же тип

поэтому поделить Complex на Double нельзя

(да Num ужасный класс типов)

т.к. если бы это было линейное поле, то тогда конечно деление Complex Double на Double было бы хорошей операцией

ещё можно сделать (/realValue) <$> complexValue

наверное

Google
Alexander
19.09.2017
19:44:14
Prelude Data.Complex> (/5) <$> 15 :+ (-5) 3.0 :+ (-1.0)

т.к. Complex является Functor, в котором функция применяется ко всем значениям, что в делении и нужно

Hot
19.09.2017
19:44:57
Ага, вроде раскурил.

Alexander
19.09.2017
19:44:59
можно написать let a ^/ b= fmap (/b) a

Hot
19.09.2017
19:45:03
И более того, оно скомпилялось.

Правда пока что вместо реальной части комплексного результата выдаёт NaN

Alexander
19.09.2017
19:45:45
можно кусок кода?

Hot
19.09.2017
19:46:43
https://dpaste.de/5khq

Vasiliy
19.09.2017
19:47:29
а у меня такой вопрос - a == 0.0 - это нормально?

Hot
19.09.2017
19:48:49
Ну так это ж когда нет первого коэффициента.

Тогда корень априори один.

x^2 = 0 получается

Vasiliy
19.09.2017
19:49:11
я почему спрашиваю

Hot
19.09.2017
19:49:14
Остаётся bx+c=0

Vasiliy
19.09.2017
19:49:22
> 0.0 == 0.3 - 0.2 - 0.1 False

Alexander
19.09.2017
19:50:10
ну /(2a)

чего ещё ожидать

Hot
19.09.2017
19:50:18
Оооо

Alexander
19.09.2017
19:50:19
на 0 делить непринято

Hot
19.09.2017
19:50:29
Блин

Alexander
19.09.2017
19:50:31
f operator = -b `operator sqrt d / (2*a)`

Hot
19.09.2017
19:50:53
Это форматирование сломалось или предлагаете так сделать?

Страница 415 из 1551