migmit: (Default)
[personal profile] migmit
Вот есть, типа, такая типа штука, называется типа "зависимые типы". Когда сам тип содержит в себе значение. И два таких типа будут (типа) совместимы, если эти значения равны. А поскольку значения будут известны только в рантайме, приходится давать доказательство того, что значения таки равны.

А вот во всяких джавах с сиплюсплюсами равенств как минимум два. Не помню точно, как они называются, но, в общем, равенство по ссылке и по значению. Первое сильнее второго. То есть, если какие-то штуки лежат в одном и том же месте, то это одна и та же штука, и, значит, они одинаковые. Но если они одинаковые — это ещё не значит, что они лежат в одном и том же месте.

В агде, если мой эклер меня не обманывает, требуется равенство по значению. А есть ли зависимые типы с равенством по ссылке? То есть, для того, чтобы Vector n Int был тем же типом, что и Vector m Int нужно не только n=m, нужно, чтобы n и m были одной и той же переменной.

Такое где-нибудь есть?

Update: подсказали, что это, вроде, называется "path dependent types".

Date: 2013-02-03 06:49 pm (UTC)
From: [identity profile] krlz.livejournal.com
В функциональных языках не может в принципе быть равенства по ссылке. У нас же referential transparency.

Date: 2013-02-03 07:47 pm (UTC)
From: [identity profile] migmit.livejournal.com
Это какой-то сферический язык в вакууме. В Хаскеле, например, есть IORef-ы.

Date: 2013-02-03 08:01 pm (UTC)
From: [identity profile] krlz.livejournal.com
Ну да, но есть же Eq IORef a, так что сравнения по ссылкам все равно нет.

Date: 2013-02-03 08:10 pm (UTC)
From: [identity profile] migmit.livejournal.com
Не понял. Это и есть сравнение по ссылкам.

Date: 2013-02-03 08:14 pm (UTC)
ext_659502: (полосатая свинья)
From: [identity profile] some41.livejournal.com
даже без IORef есть stable names: http://www.haskell.org/ghc/docs/latest/html/libraries/base/System-Mem-StableName.html

Date: 2013-02-03 08:21 pm (UTC)
From: [identity profile] krlz.livejournal.com
Ну так на уровне типов это работать то не будет.

Date: 2013-02-03 08:23 pm (UTC)
ext_659502: (полосатая свинья)
From: [identity profile] some41.livejournal.com
что именно не будет работать? использование stable name в типе в хаскеле? так в хаскеле вообще dependent types нет

Date: 2013-02-03 09:10 pm (UTC)
From: [identity profile] jakobz.livejournal.com
Ну что-то типа этого есть: http://www.haskell.org/ghc/docs/latest/html/libraries/base/System-Mem-StableName.html

Глупо было бы не иметь бесплатного "точно равно, т.к. физически указатели на один и тот же объект".

Date: 2013-02-04 07:26 am (UTC)
From: [identity profile] thedeemon.livejournal.com
В окамле есть = и ==, как раз по значению и по ссылке. Изредка даже пригождается на практике.

Date: 2013-02-04 09:51 am (UTC)
From: [identity profile] krlz.livejournal.com
Это оптимизация.

Date: 2013-02-04 10:02 am (UTC)
From: [identity profile] krlz.livejournal.com
Я не правильно выразился конечно. Имелось ввиду парадигма ФП противоречит равенству по ссылке. Сравнивая по ссылке, мы делаем хак.