The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"В рамках проекта SMACK развивается новая система статической..."
Отправлено scor, 06-Фев-13 18:01 
> В вашем примере же правила приведения какие-то отрабатывают, я так понимаю?

http://www.ibm.com/developerworks/ru/library/l-haskell2/inde...-
Типы не приводятся автоматически, они могут выводятся, исходя их контекста написанного выражения.
Prelude> :t max
max :: Ord a => a -> a -> a
В данном случае тип выражения наиболее общий. Любой тип, который может быть упорядочен (Ord), т.е. для которого определена функция "compare". Но тип двух аргументов и результата должен быть одинаков.
Prelude> :t max 1
max 1 :: (Num a, Ord a) => a -> a
Тут мы уже более конкретизировали наши намерения. Помимо Ord, мы ещё хотим, чтобы аргумент относился к классу чисел (Num), для которого определены функции: +, -, * и взятие абсолютного значения (abs).
Prelude> :t max 1.2
max 1.2 :: (Fractional a, Ord a) => a -> a
Более конкретно. Мы хотим тип для которго определено значение функции / "разделить".
Prelude> :t max 'a'
max 'a' :: Char -> Char
Тут мы хотим тип Char, для которого определена операция сравнения и соответственно мы можем определить какой из аргументов больше.

Примерно также могли бы поступать и шаблоны в c++. Но видимо были на то какие-то веские основания так не делать.

> Кстати, а что будет, если одним из аргументов вам сунуть не Double, а функцию или строку?

Тип выражения не получиться вывести автоматически, т.к. 1 нельзя выразить типом Char, а 'A' нельзя выразить типом из класса Num.
Prelude> max 1 'A'
No instance for (Num Char) arising from the literal `1'
Possible fix: add an instance declaration for (Num Char)

ЗЫ. Мог запутаться в терминологии. Не хаскелл-гуру я пока.:)

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру