The OpenNET Project / Index page

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



"В рамках проекта SMACK развивается новая система статической..."
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "В рамках проекта SMACK развивается новая система статической..." +/
Сообщение от scor (ok), 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)

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

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
В рамках проекта SMACK развивается новая система статической..., opennews, 04-Фев-13, 21:42  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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