С Новым годом! Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 05.08.2011
Сообщений: 18

Структуры данных

23.09.2011, 13:02. Показов 3172. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например, объявить тип массива целых чисел моджно так:
type MyType = [Int]

А если я хочу массив не типов, а классов типов? вроде такого:
type MyType = [Num]

Но так сделать нельзя. также нельзя:
type MyType = (Num a) => [a]

А как правильно будет?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.09.2011, 13:02
Ответы с готовыми решениями:

Рекурсивные структуры данных с синхронным обходом
Обращаюсь за помощью к знающим тему. Ситуация такая. Есть два рекурсивных типаdata Pattern = Leaf | Alternative Pattern...

Функция вывода поля пользовательской структуры данных
Есть структура данных data Figure = Tel String String String Int Int | Cheh String String Integer String Int | ...

Понятие структуры данных. Элементарные структуры данных. Простые структуры данных
Понятие структуры данных. Элементарные структуры данных. Простые структуры данных: методы реализации, особенности в различных языках...

3
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
23.09.2011, 13:45
Во-первых, MyType должен иметь вид (*->*), если желаешь использовать типовую переменную a в описании типа. Значит, должно быть что-то типа type MyType a = [a].
Во-вторых, type не поддерживает контекст типов. Поэтому следует использовать вмето него newtype:
Haskell
1
2
3
newtype (Num a) => MyType a = MyType [a]
getlist :: (Num a) => MyType a -> [a]
getlist (MyType x) = x
Впрочем, недостаток такого метода очевиден: лишнее "оборачивание" имен, доп. функции и полная потеря всех instance списка.
0
1 / 1 / 0
Регистрация: 05.08.2011
Сообщений: 18
23.09.2011, 20:04  [ТС]
Спасибо!
а чем собственно отличается newtype от type/data?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
24.09.2011, 03:25
Если вкратце:
  1. data - единственное из всех ключевых слов, предназначенное для создания действительно новых алгебраических типов данных (которые могут иметь несколько конструкторов)
  2. type - ключевое слово, предназначенное для создания псевдонима (нового названия). Псевдоним и старое название могут быть использованы в программе полностью взаимозаменяемо. Кроме того, псевдонимы не могут быть по умолчанию экземплярами (instance) классов типов (но существует директива ghc, которая меняет это поведение). Новое имя, введенное type, "наследует" все классы того типа, на который оно ссылается.
  3. newtype действует подобно type, но с некоторыми различиями. Во-первых, компилятор различает новое имя, введенное newtype, и тип, который оно "оборачивает"; как следствие, при этом классы "оборачиваемого" типа не наследуются и нельзя использовать имя, введенное с помощью newtype, в функциях, работающих со старым типом. Во-вторых, объект нового типа создается с помощью конструктора, который имеет только одно поле (и такой конструктор должен быть единственным).
    Также стоит отметить, что конструкторы newtype-типов существуют только на стадии компиляции
Подробнее о различии data/type/newtype можно почитать здесь (где-то с середины главы): http://book.realworldhaskell.o... asses.html
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2011, 03:25
Помогаю со студенческими работами здесь

Динамические структуры данных. Организация данных в списковые структуры
Написать программу вставки нового элемента в список за некоторым заданным по- рядковым номером элементом (вставка осуществляется не в...

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

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё.
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...

Динамические структуры данных, списковые структуры (надо разобраться что делает программа)
дана программа, надо помочь выяснить что в ней делает каждая подпрограмма unit Unit6; interface uses Windows,...

Структуры. Вызов данных структуры по указателю. с++
Условие задачи: Помогите, пожалуйста, с как реализовать печать вообще не представляю.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru