[Haskell] Классы типов
От: Аноним  
Дата: 02.04.08 15:21
Оценка:
Коллеги,
никак не могу разобраться с классами типов в Haskell. Объясните, или подскажите, что почитать.

Если опыт программирования на Java, C#. Понимаю классы, интерфейсы, дженерики с констрейнтами.
Re: [Haskell] Классы типов
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 02.04.08 15:36
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>Коллеги,

А>никак не могу разобраться с классами типов в Haskell. Объясните, или подскажите, что почитать.

А в чём именно затык?

Классы типов нужны для перегрузки функций. Это основное.
Что почитать — находится в гугле

Во-первых, откуда они взялись: How to Make Ad-Hoc Polymorphism Less Ad Hoc

Ну и глава из туториала и вики

http://en.wikibooks.org/wiki/Haskell/Class_Declarations
http://en.wikibooks.org/wiki/Haskell/Classes_and_types
http://en.wikibooks.org/wiki/Haskell/Advanced_type_classes

http://www.haskell.org/tutorial/classes.html

А>Если опыт программирования на Java, C#. Понимаю классы, интерфейсы, дженерики с констрейнтами.


Может быть это для сравнения?

http://www.haskell.org/haskellwiki/OOP_vs_type_classes

Но лучше вопросы задавай.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: [Haskell] Классы типов
От: Schade Россия  
Дата: 02.04.08 15:55
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Коллеги,

А>никак не могу разобраться с классами типов в Haskell. Объясните, или подскажите, что почитать.

А>Если опыт программирования на Java, C#. Понимаю классы, интерфейсы, дженерики с констрейнтами.


Чтобы проще понять, то, наверное, ближе всего они к интерфейсам. Но мощнее
class SomeClass where ... — это объявление "интерфейса".
instance SomeClass MyType where ... — реализация "интерфейса" для указанного типа.

Естественно, это в самых общих чертах. Отличий много. Реализация — вне самого типа, т.е. можно объявить принадлежащим к классу типов любой, хоть свой, хоть чужой, тип.
Constraints позволяют указать, при каких условиях тип будет принадлежать к классу типов. Возможна перегрузка по возвращаемому значению функции.

Кстати, с Java/C# бэкграундом бывает тяжеловато понять просто в силу непривычности нотации (где тип, где type constructor, где data constructor, а где вообще вызов функции). Может, имеет смысл сначала еще раз перечитать про типы.

-- есть стандартный класс Show:
-- типы, принадлежащие к классу Show, можно преобразовывать в строку

class Show s where
    show :: s -> String

-- т.е. функция show может быть применена только к типу, принадлежащему к классу Show

data MyComplexType a = MyComplexType Int a

-- следующая конструкция означает:
-- при условии, что MyComplexType параметризован типом s, принадлежащим к классу типов Show, 
-- MyComplexType s также принадлежит к классу типов Show

instance Show s => Show (MyComplexType s) where
    show (MyComplexType ident val) = "MyComplexType identified by " ++ show ident ++ " containing " ++ val
Re[2]: [Haskell] Классы типов
От: Schade Россия  
Дата: 02.04.08 17:59
Оценка:
сорри.. в последней строчке наврал...
instance Show s => Show (MyComplexType s) where
    show (MyComplexType ident val) = "MyComplexType identified by " ++ show ident ++ " containing " ++ show val
Re: [Haskell] Классы типов
От: Plague Россия 177230800
Дата: 02.04.08 22:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Коллеги,

А>никак не могу разобраться с классами типов в Haskell. Объясните, или подскажите, что почитать.

А>Если опыт программирования на Java, C#. Понимаю классы, интерфейсы, дженерики с констрейнтами.

В Хаскелле — это классы типов, а не сами типы, как это является в Яве/С++ и т.п.
Для меня все прояснил вот этот туториал по Haskell ну и где-то тут на форуме была растусовка чем отличаются виды полиморфизма
Автор: Gaperton
Дата: 26.02.08
, просто в Хаскелле немного другой... т.е. т.н. Ad hoс... надеюсь, поможет...
Re[2]: [Haskell] Классы типов
От: Code Digger Грузия  
Дата: 03.04.08 06:34
Оценка:
Здравствуйте, Schade, Вы писали:


S>Кстати, с Java/C# бэкграундом бывает тяжеловато понять просто в силу непривычности нотации (где тип, где type constructor, где data constructor, а где вообще вызов функции).

Мне в последнее время кажется, что и type constructor, и data constructor следует (просто проще) понимать именно как вызов функции.

Может, я не прав. Тоже хотелось бы узнать, как правильнее и в чём разница.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.