powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / [haskell] ограничение системы типов хаскеля.
14 сообщений из 39, страница 2 из 2
[haskell] ограничение системы типов хаскеля.
    #37470503
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U-gene, то проблема будет ловиться на этапе компиляции.

да нет никаких проблем, если не использовать императивное ооп.
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37470525
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну привет, приехали
вот предал ты объект-квадрат по ссылке
в теле метода изменил ширину методом для прямоугольника
и что?
теперь у тебя квадрат с разной длиной-шириной? так это уже не квадрат
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37470540
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U-geneну привет, приехали
вот предал ты объект-квадрат по ссылке
в теле метода изменил ширину методом для прямоугольника
и что?
теперь у тебя квадрат с разной длиной-шириной? так это уже не квадрат

че ты мыслишь методами с++. передал по ссылке. изменил ширину.

я же и говорю, что чтоль очевидное наследование, принятыми средствами ооп не работает.

зато работает для иммутабельных объектов.

суть проста, как валенок.
есть ф-я, котороая работает с прямоугольниками - тогда мы можем туда передать квадрат и все будет ок.

есть ф-я - для квадратов, туда прямоугольник передать система типов не позволти(на этапе компеляции)
все. где проблемы.
а понятий передать по ссылке и изменить объект - в хаскеле нет.
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37470541
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U-geneтеперь у тебя квадрат с разной длиной-шириной? так это уже не квадрат

да нет. теперь у меня прямоугольник с разной(а может быть и не разной) длинной-шириной.
т.е. setWidth возвращает прямоугольник.
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37470547
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я шас еще про тот мартиновский пример говорю, который в статье чингиза описан
там совершенно четко кусок кода, который работает с прямоуголькником логически криво работает с квадратом, потомучто внутренние зависимости квадрата отличаются от таковых у прямоугольника.

я, как практик, хоч такие ошибки ловить как то.

что б с однос тсторы квадарта был прямоугольником а сдругой - при описании внутренних зависимостей не был бы им.
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37470555
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я мыслю категориями, как ими мыслят процентов девяносто с хвостиком . :)

и мое наследование LOOKS_LIKE в эти категории укладывается и вроде позволяет достичь того же результата.
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37471995
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U-geneя мыслю категориями, как ими мыслят процентов девяносто с хвостиком . :)

и мое наследование LOOKS_LIKE в эти категории укладывается и вроде позволяет достичь того же результата.
))
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37472005
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати. в моем коде есть страшная ошибка. и я пока незнаю как ее исправить.
все же систему типов хацкеля я не поборол. ведь я не задал что тип возвращаемый методами сетВидз и сетХейгт обяза быть инстансом класса Рэктангле.

но я думаю что решу данную проблему.
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37472032
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNкстати. в моем коде есть страшная ошибка. и я пока незнаю как ее исправить.
все же систему типов хацкеля я не поборол. ведь я не задал что тип возвращаемый методами сетВидз и сетХейгт обяза быть инстансом класса Рэктангле.

но я думаю что решу данную проблему.

проблема повикшена:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE FlexibleInstances #-}


class Rectangle r1 r2 a | r1 a -> r2 a where 
    setWidth :: r1 a -> a -> r2 a
    setHeight :: r1 a -> a -> r2 a
    getWidth :: r1 a -> a
    getHeight :: r1 a -> a

class EqualAngle e where
    getNumberOfAngles :: e a -> Int
    
class (Rectangle s r a, EqualAngle s) => Square s r a where
    setSide :: s a -> a -> s a
    getSide :: s a -> a

data Sqr a = Square a
             deriving Show
data Rct a = Rectangle a a
             deriving Show

instance Square Sqr Rct a where
    setSide    _ s         = Square s
    getSide   (Square s)   = s

instance Rectangle Sqr Rct a where
    setWidth  (Square s) w = Rectangle w s
    setHeight (Square s) h = Rectangle s h
    getWidth  (Square s)   = s
    getHeight (Square s)   = s

instance EqualAngle Sqr where
    getNumberOfAngles _ =  4 
    
    
instance Rectangle Rct Rct a where
    setWidth  (Rectangle _ h) w = Rectangle w h
    setHeight (Rectangle w _) h = Rectangle w h
    getWidth  (Rectangle w _)   = w
    getHeight (Rectangle _ h)   = h

square rect = (getWidth rect) * (getHeight rect)

...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37472742
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот код попроще, но без возможности множественного наследования:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
data (Num a) => Rectangle a = Rectangle a a
                            | Square a
    
setWidth (Rectangle _ h) w = Rectangle w h
setWidth (Square s) w = Rectangle w s
setHeight (Rectangle w _) h = Rectangle w h
setHeight (Square s) h = Rectangle s h

getWidth (Rectangle w _) = w
getWidth (Square s) = s
getHeight (Rectangle _ h) = h
getHeight (Square s) = s


square r = (getWidth r) * (getHeight r)  

вот как поломать данный код?
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37472748
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во забыл:

Код: plaintext
1.
2.
setSide (Rectangle _ _) s = Square s
setSide (Square _) s = Square s
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37472764
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или даже круче так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
data (Num a) => Rectangle a = Rectangle a a
                            | Square a
    
setWidth (Rectangle _ h) w | w == h = Square w
                           | otherwise Rectangle w h
setWidth (Square s) w | w == s = Square w
                      | otherwise Rectangle w s
setHeight (Rectangle w _) h | w == h = Square w
                            | otherwise Rectangle w h
setHeight (Square s) h | s == h = Square s
                       | otherwise Rectangle s h

getWidth (Rectangle w _) = w
getWidth (Square s) = s
getHeight (Rectangle _ h) = h
getHeight (Square s) = s

setSide (Rectangle _ _) s = Square s
setSide (Square _) s = Square s

square r = (getWidth r) * (getHeight r)  
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37473086
желание шевелить мозгами отсутствует
желание писать быдлокод прям захлёстывает
...
Рейтинг: 0 / 0
[haskell] ограничение системы типов хаскеля.
    #37473788
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
haskell форэважелание шевелить мозгами отсутствует
желание писать быдлокод прям захлёстывает

я просто не шарю систему типов хацкеля. вот и пытаюсь на данном примере с ней познакомится.
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / [haskell] ограничение системы типов хаскеля.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]