@haskellru

Страница 400 из 1551
Evgeniy
13.09.2017
08:52:02
что тут функторы?

Yuriy
13.09.2017
08:52:30
в категории монад (точнее, просто морфизмов типов) как объектов и морфизмов морфизмов типов (например, монадных трансформеров) как стрелок

о функторах в этой категории лучше пока не думать

ТК-функторы — они вообще не в категории, а между категориями

Google
Evgeniy
13.09.2017
08:55:51
> так что здесь их нет да это понятно не понятно по чему эта стрелка есть морфизм между монадами

Yuriy
13.09.2017
08:56:24
объекты этой категории — эндофункторы в категории (Type, ->)

Evgeniy
13.09.2017
08:58:42
я понял что определение стрелки в этой категории оно вот ближе к монадному трансформеру

Yuriy
13.09.2017
08:58:43
> так что здесь их нет да это понятно не понятно по чему эта стрелка есть морфизм между монадами
это более широкая штука, в том числе это и морфизм между монадами, потому что монада — это частный случай морфизма типов

монадный трансформер — частный случай

Evgeniy
13.09.2017
08:59:20
а тк трансформер он тоже type->type то это может быть так заэнкоженно?

Yuriy
13.09.2017
08:59:32
тут скорее функторный трансформер

Evgeniy
13.09.2017
09:02:49
мы же пытаемся это все в Hask изобразить, по этому вот и получается что в конечном счете у навсе все морфизмы тут type->type

у меня конечно после того как вышли за рамки Hask мозг сломался

> потому что монада — это частный случай морфизма типов

Google
Evgeniy
13.09.2017
09:06:34
а вот это мне прояснило картину

спасибо

Yuriy
13.09.2017
09:12:06
или как это правильно называется?

монада (хаскелльная) m является стрелкой из а в m a, но её тип Type -> Type является стрелкой из Type в себя

для сорта Type -> Type нельзя написать instance Category, но можно для (~>), который ему изоморфен (впрочем, я не уверен, что действительно изоморфен)

kana
13.09.2017
09:58:12
Не могу понять, почему кайнд переводят как сорт. Ну напрашивается же "вид". Функция вида..., тип вида...

Евгений
13.09.2017
10:07:20
Давайте переводить "порода"

? animufag ?
13.09.2017
10:07:42
добро

kana
13.09.2017
10:09:40
Я предпочитаю старое русское слово кайнд

Yuriy
13.09.2017
10:45:26
кайнд — это же тип₂? или тип₁?

? animufag ?
13.09.2017
11:17:55
Тогда там наверное есть тип0

Yuriy
13.09.2017
11:43:47
кайнды — термы2, типы — термы1, значения — термы0

Index
13.09.2017
11:48:45
Нельзя сказать, что типы — это тёрмы_1

Эта иерархия (тип0, тип1, тип2) не затрагивает термы

Yuriy
13.09.2017
11:52:43
уровни термов я скопировал с изменениями из https://www.cs.cmu.edu/~kw/scans/hurkens95tlca.pdf, возможно, направильно

Index
13.09.2017
11:57:19
Я не исключаю, что такая формальная система возможна (пейпер не читал и сейчас не хочется), просто это не то, что делают proof assistants сегодняшние.

Yuriy
13.09.2017
12:00:01
а что делают сегодняшние?

кажется, я где-то читал про бесконечный ряд Type_n :: Type_{n+1}, и как TypeInType отождествляет их все, но сейчас не могу найти

Index
13.09.2017
12:01:33
так и есть, просто это не с тёрмов начинается

Google
Index
13.09.2017
12:01:49
имеем тёрмы, а потом тип0, тип1, тип2, тип3, etc

с type-in-type имеем тёрмы, потом типы (зацикленные в себя)

Denis
13.09.2017
17:10:45
а тут все рекурсивные схемы обсуждают)

Bohdan
13.09.2017
19:45:16
ghc умеет кросс-компиляцию под винду?

? animufag ?
13.09.2017
21:54:05
ghc умеет кросс-компиляцию под винду?
вот кстати интересный вопрос. правда после студенчества ни разу таким не интересовался: всегда найдутся машины с целевой платформой

Aragaer
14.09.2017
04:36:34
-C Stop after generating C (.hc file)

дальше берется нужный кросс-компилятор С

и семейство флагов -pgm*

Yuriy
14.09.2017
04:46:17
а в какой момент кабал будет вычислять "if win32"?

Leonid
14.09.2017
08:20:52
без кабала, ghc -make и вперде

Alexandr
14.09.2017
12:57:45
Всем привет! Как можно создать инстанс для тайпкласса/тайпклассов? Что-то вроде class Foo a where bar :: a -> Bool instance (Ord a, Num a) => Foo a where bar n = n > 10

Kirill
14.09.2017
12:58:56
А что должно помешать?

Aleksey
14.09.2017
12:59:19
Будет ругать на ограничение в инстансе, которого (ограничения) нет в классе

Oleg
14.09.2017
12:59:24
Полагаю, такой конкретно инстанс корректен только если нет ни одного другого

Kirill
14.09.2017
13:00:29
моноиды же так объявлены

Aleksey
14.09.2017
13:01:09
Там ограничение - тоже Моноид

Это как раз логично

Alexandr
14.09.2017
13:01:42
для этого будет ошибка error: • Illegal instance declaration for 'Foo a' (All instance types must be of the form (T a1 ... an) where a1 ... an are *distinct type variables*, and each type variable appears at most once in the instance head. Use FlexibleInstances if you want to disable this.) • In the instance declaration for 'Foo a'

Google
Oleg
14.09.2017
13:01:58
Use FlexibleInstances

Kirill
14.09.2017
13:02:04
дык да: FlexibleInstances

Aleksey
14.09.2017
13:02:09
Ага, компилятор даже подсказывает, что включить

Alexandr
14.09.2017
13:02:14
ну это от части помогает, но потом

error: • The constraint 'Ord a' is no smaller than the instance head (Use UndecidableInstances to permit this) • In the instance declaration for 'Foo a'

Kirill
14.09.2017
13:02:34
» UndecidableInstances

Aleksey
14.09.2017
13:02:38
Ага

Но могут быть проблемы с выводом типов - он не завершится (зациклится) :)

Kirill
14.09.2017
13:03:44
я вроде что-то подобное делал и вполне работало

Aleksey
14.09.2017
13:03:58
Оно работает пока не сломается :)

Я про UndecidableInstances

Kirill
14.09.2017
13:04:09
Лол

Oleg
14.09.2017
13:04:11
да, на простом всё норм



Alexandr
14.09.2017
13:04:17
а есть норм вики про прагмам?

Aleksey
14.09.2017
13:04:28
Есть - дока по GHC

Vasiliy
14.09.2017
13:04:46
говорят, что UndecidableInstances никаких проблем не влечёт

проблемы от IncoherentInstances

Oleg
14.09.2017
13:05:01
Aleksey
14.09.2017
13:05:23
Ну потенциально компилер может запомнить, что он уже нашел инстанс для некоего типа, но не обязан - это я про "is no smaller than"

Google
Alexandr
14.09.2017
13:07:09
у меня была такая проблема с кодом, я сделал newtype для Int, потом засунул его в bar и вышла ошибка, о том, что есть несколько инстансов

ща

{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE UndecidableInstances #-} class Foo a where bar :: a -> Bool newtype Int' = Int' Int deriving (Eq, Show, Foo) instance (Num a, Ord a) => Foo a where bar n = n > 10

Oleg
14.09.2017
13:09:39
Ну правильно

ты пытаешь вывести инстанс для Int', в то время как ниже объявляешь инстанс для всех типов вообще

они пересекаются

Aleksey
14.09.2017
13:10:11
Надо параметризовать ньютайп

Oleg
14.09.2017
13:10:35
засунь тогда нижний инстанс тоже в ньютайп

Aleksey
14.09.2017
13:12:08
нижний инстанс вообще не отностится к Int' никак, т.к. ньютайп не инстанциирует орд и не нум

Но т.к. инстанс - всеядный, то получется, он подходит и для Int'

Oleg
14.09.2017
13:12:38
нижний инстанс вообще не отностится к Int' никак, т.к. ньютайп не инстанциирует орд и не нум
а для определения какой инстанс использовать это не важно, это же не скалка

Alexandr
14.09.2017
13:12:45
просто выходит, что если объявить инстанс для инта, то тогда все задервайвится и будет работать, но при этом не будет возможности использовать bar для любых Ord, Num

Oleg
14.09.2017
13:12:55
нижний инстанс может существовать только в единственном числе

нижний инстанс вообще не отностится к Int' никак, т.к. ньютайп не инстанциирует орд и не нум
компилятор не может гарантировать, что где-то дальше не найдётся орфант инстанс нума и орда для Int'

Aleksey
14.09.2017
13:14:04
class Foo a where bar :: a -> Bool newtype Fooable a = Fooable a deriving (Eq, Show, Foo) instance (Num a, Ord a) => Foo (Fooable a) where bar (Fooable n) = n > 10

Страница 400 из 1551