Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
7 / 7 / 0
Регистрация: 25.03.2012
Сообщений: 72
1

О выводе типов

14.10.2012, 18:58. Показов 936. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот интересно, а почему GHC в первом случае vAbs1 вывел тип обобщённо, а во втором случае vAbs2 частно.

Вот код, о котором я говорю:

Haskell
1
2
vAbs1 a = (sqrt . sum . map (^2)) a
vAbs2   =  sqrt . sum . map (^2)
И в интерпретаторе:

*Main> :t vAbs1
vAbs1 :: Floating c => [c] -> c
*Main> :t vAbs2
vAbs2 :: [Double] -> Double

Нет, конечно-же можно и тип указать и переменные, но это такой кайфолом...
Быть может есть какая-то опция, которая заставит его вывести тип более обобщённо, или это как с обычными типами данных: определил, и конкретный (частный) тип сразу выведен?

Не по теме:

Функция возвращает модуль вектора, реализованного через список, если это интересно.

0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2012, 18:58
Ответы с готовыми решениями:

Приведение типов. Должны получиться другие значения при выводе в консоль. x[0]=0,0682
#include <cmath> #include <iostream> #include <conio.h> #include <iomanip> // для setprecision...

Почему при выводе указателя получаем для char - значение по адресу, а для других типов - адрес
Есть следующий код. Результат работы этой программы представлен на рисунке. Почему при выводе...

При выводе в PDF или выводе на печать, не видно часть чертежа!
Прошу помощи! Не видно часть чертежа. Точно точно дело не слоях.

Чтение и запись типов, массив типов и List<> данных в файл
Здравствуйте Подскажите способ записи и чтения любых типов данных (не компонентов) Например это: ...

5
78 / 64 / 5
Регистрация: 25.03.2012
Сообщений: 71
14.10.2012, 20:52 2
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от 9Символов Посмотреть сообщение
Вот интересно, а почему GHC в первом случае vAbs1 вывел тип обобщённо, а во втором случае vAbs2 частно.
monomorphism restriction, если не ошибаюсь.
Нет, конечно-же можно и тип указать и переменные, но это такой кайфолом...
Быть может есть какая-то опция, которая заставит его вывести тип более обобщённо, или это как с обычными типами данных: определил, и конкретный (частный) тип сразу выведен?

Не по теме:

Функция возвращает модуль вектора, реализованного через список, если это интересно.

юзать флаг NoMonomorphismRestriction:

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Prelude> let f x = x + 1
Prelude> let g = (+ 1)
Prelude> :t f
f :: Num a => a -> a
Prelude> :t g
g :: Integer -> Integer
Prelude>
Prelude> :set -XNoMonomorphismRestriction
Prelude>
Prelude> let f x = x + 1
Prelude> let g = (+ 1)
Prelude> :t f
f :: Num a => a -> a
Prelude> :t g
g :: Num a => a -> a
3
7 / 7 / 0
Регистрация: 25.03.2012
Сообщений: 72
15.10.2012, 08:46  [ТС] 3
Спасибо, а есть ли возможность указать этот флаг в файлике исходного кода? Чтоб при его загрузке прям сразу устанавливалось это.

Добавлено через 46 минут
Есть такой способ!

В начале файла исп.

Haskell
1
{-# OPTIONS_GHC -XNoMonomorphismRestriction #-}
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
15.10.2012, 11:01 4
Прагма {-# LANGUAGE NoMonomorphismRestriction #-} как-то правильней
0
7 / 7 / 0
Регистрация: 25.03.2012
Сообщений: 72
15.10.2012, 13:23  [ТС] 5
А есть ли разница, кроме того, что "моя" для GHCi?
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
15.10.2012, 13:29 6
9Символов, прагма LANGUAGE предназначена именно для указания расширений языка, в то время как OPTIONS_GHC — для установки произвольной опции (а это может быть не только опция вида -Xextension) для компилятора GHC, что менее портабельно. Можно подробней почитать здесь
1
15.10.2012, 13:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2012, 13:29
Помогаю со студенческими работами здесь

Создать массивы разных типов(3 типов), вывести их на экран
Создать массивы разных типов(3 типов), вывести их на экран.

Не требуется приведение типов при умножении типов Byte
Читал тут книгу(Г. Шилдт, &quot;Полный справочник по C#&quot;), и нашел такое (ст. 77) Поскольку при...

Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.
Буду благодарен! Найти предельные значения для целочисленных типов. Не использовать заранее...

Разработайте перегружены функции, в которые передаются два параметра типов int или float и три параметра типов
Разработайте перегружены функции, в которые передаются два параметра типов int или float и три...

Приведение типов сырых типов
class Gen&lt;T&gt; { T ob Gen(T o) { ob=o; } T getob(){ return ob; } public class RawDemo...

Внутреннее представление типов данных VB6.0. Эквиваленты типов данных VB в C++
Добрый день. Интересует такой вопрос. Где можно почитать, посмотреть научные данные по внутреннему...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru