Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 13.09.2013
Сообщений: 38

Сигнатура функции, содержащая ограничение класса

10.12.2014, 11:15. Показов 671. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{- This variants of definition don't working: -}
{- test::(String a)=>a->a -}
{- test::([Char] a)=>a->a -}
 
{- This variants of definition work fine: -}
{- test::[Char]->[Char] -}
{- test::String->String -}
 
{- Without of definition of the function signature work fine too: -}
test [] = "Empty"
test "qwer" = "Bingo!"
test a  
    | len > 4 && len <= 10 = "Long word..."
    | length a > 10 = "Longest word..."
    | otherwise = "Unexpected text..."
    where len = length a
В комментариях даны четыре варианта определения сигнатур функции. На первые два ghci ругается примерно так:
src.hs:2:8:
`String' is applied to too many type arguments
In the type signature for `test': test :: String a => a -> a
Failed, modules loaded: none.
Следующие два варианта, равно как и их полное отсутствие, загружаются успешно. Не могу понять, где ошибка в первых двух вариантах... Буду признателен за помощь.

Спасибо.

Добавлено через 32 минуты
Кнопки удаления темы не нашёл. Ответ:
Because String and Char are types, not type classes, you cannot write (String a)=> ... or ([Char] a)=> ...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.12.2014, 11:15
Ответы с готовыми решениями:

Переусложнённая сигнатура функции
TutorialPluginAudioProcessorEditor::TutorialPluginAudioProcessorEditor (TutorialPluginAudioProcessor&amp; p) : AudioProcessorEditor (&amp;p),...

Ограничение на количество предков у класса в с++/с#, модификатор метода класса
8. При наличии какого модификатора в методе класса недоступен идентификатор this?  const  thiscall  static ...

"Сигнатура" внутри класса/структуры - можно ли?
Приветствую форумчан! Есть функция, принимающая void*. Допустим, я хочу передавать этой функции указатель на два различных вида...

7
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,709
Записей в блоге: 14
10.12.2014, 12:58
Что-то непонятно... Сигнатура этой функции:

Haskell
1
test :: String -> String
и "никаких гвоздей!"
0
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
12.12.2014, 11:43
include_brain, Вы путаете тип, и класс типов... в Хаскеле в отличии от скажем С++ это разные вещи.
0
3 / 3 / 0
Регистрация: 13.09.2013
Сообщений: 38
12.12.2014, 12:07  [ТС]
Я уже ничего не путаю. В первом же сообщении добавлена информация с ответом по теме. Я бы удалил тему, в виду того, что она не несёт никакой полезной нагрузки, но не имею возможности сделать это. Если модераторы\администраторы удалят её - я буду это только приветствовать.

Классы типов - это аналогия интерфейсов в .net, а типы - это конкретные реализации этих интерфейсов. Как и в .Net интерфейс может быть реализован многими типами. Попутно тип может реализовывать столько интерфейсов, сколько ему нужно.

Изначально я подумал, что в качестве ограничения класса типа можно задавать и конкретные типы (только начал изучение Haskell по книге Липовачи), однако, как выяснилось - я ошибался.

P.S. На данный момент читаю 6-ю главу + попутно повторяю материал предыдущих, т.к. в голове порой некоторые вещи укладываются не сразу, но при повторении материала всё более и более упорядочивается. В целом мне Haskell пока нравится. Нравится именно своей лаконичностью (в ней своя, особенная красота), отсутствием побочных эффектов, а так же тем, что с его помощью в самом деле описывается что нужно делать, а не как это делать. Дополнительно меня интересует возможность в Haskell использовать библиотеки, написанные на C и C++, равно как и возможность в C\C++ использовать код, написанный на Haskell (в оглавлении книги информации об этом не вижу). Буду искать информацию по теме, после того, как уверенно освою материал обозначенной книги. Если у кого есть соответствующие ссылки - буду признателен за них.

Спасибо.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,709
Записей в блоге: 14
12.12.2014, 12:32
C++ и Haskell Например, здесь
1
3 / 3 / 0
Регистрация: 13.09.2013
Сообщений: 38
12.12.2014, 12:35  [ТС]
Спасибо.
0
Модератор
 Аватар для Curry
5158 / 3482 / 536
Регистрация: 01.06.2013
Сообщений: 7,549
Записей в блоге: 9
12.12.2014, 16:54
Цитата Сообщение от include_brain Посмотреть сообщение
Классы типов - это аналогия интерфейсов в .net
Не, а. В классах типов могут быть реализации функций, а не только сигнатуры. Это набор функций привязанных к абстрактному типу.
0
3 / 3 / 0
Регистрация: 13.09.2013
Сообщений: 38
13.12.2014, 23:37  [ТС]
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Не, а. В классах типов могут быть реализации функций, а не только сигнатуры. Это набор функций привязанных к абстрактному типу.
Значит я ошибся. Только недавно дочитал до главы "Создание новых типов и классов типов." и сейчас осваиваю её.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2014, 23:37
Помогаю со студенческими работами здесь

Какими способами можно использовать функции класса B, как параметры функции Sub класса А?
class A {... void Sub(...); ...} class B : ... { public: float f1(float); float f2(float); ...

Ограничение конструктора класса
У меня есть два класса. Второй вложен в первый (но это не принципиально). Мне надо ограничить конструктор второго класса так, что бы...

Переменная в функции содержащая действие
День добрый. Никак не могу разобраться с образовавшееся проблемой. Создал функцию Authentic(String &amp;load): void __fastcall...

Ограничение количества объектов класса
Вопрос: как ограничить количество объектов одного класса?

Mutex ограничение доступа к переменным класса
Доброго времени суток. Подскажите пожалуйста, что я делаю не так? class Bitmap { private: mutex...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru