2015-03-04 3 views
1

Я учусь Haskell встретить что-то вроде следующего:Haskell определить тип данных

data ABC :: * where 
Empty :: ABC 
Single :: Char -> ABC 

что делает выше в виду? И что это значит, когда мы говорим «напишите ABC, представляющую что-то»?

+1

ABC - это тип данных. Этот конкретный тип данных записывается с использованием синтаксиса GADT (обобщенный алгебраический тип данных) - это своего рода необычный, и обычно вы должны писать его как «данные ABC = Empty | Single Char'. Надеюсь, смысл этой последней формы более ясен - если нет, вы должны взглянуть на вводный учебник [Haskell tutorial] (http://learnyouahaskell.com/). – user2407038

+0

@ user2407038 thx много для вашего ответа. Я знаю базовый синтаксис Haskell, но я просто не понимаю, что это значит, «напишите ABC, представляющий что-то»? – xcoder

+1

Интерпретация типа данных - какой тип данных «представляет» - не запекается на языке, а скорее из модели. Например, связанный список может * представлять * стек. Но вы не будете ссылаться на список как стек, если только вы его не используете. 'ABC' изоморфен' Maybe Char', но это все, что можно сказать, не зная ничего о моделируемой модели. В общем, когда вы говорите «напишите тип данных, представляющий ...», вы имеете в виду перевод вашей модели в конкретный синтаксис Haskell (или любого другого языка). – user2407038

ответ

2

Этот синтаксис идентичен синтаксису стандартного типа данных в Haskell. В частности, тип ABC такой же, как

data ABC = Empty | Single Char 

Синтаксис включая статью where называется «GADT синтаксисом» и предлагает некоторую дополнительную выразительность, позволяя ясный синтаксис для «экзистенциальных типов» и «равенств типа». Тем не менее, оба эти являются довольно продвинутыми темами. Придерживайтесь основными типами, пока не получите свои водные ноги.

Смежные вопросы