Интересно, типа.
Feb. 3rd, 2013 10:33 pmВот есть, типа, такая типа штука, называется типа "зависимые типы". Когда сам тип содержит в себе значение. И два таких типа будут (типа) совместимы, если эти значения равны. А поскольку значения будут известны только в рантайме, приходится давать доказательство того, что значения таки равны.
А вот во всяких джавах с сиплюсплюсами равенств как минимум два. Не помню точно, как они называются, но, в общем, равенство по ссылке и по значению. Первое сильнее второго. То есть, если какие-то штуки лежат в одном и том же месте, то это одна и та же штука, и, значит, они одинаковые. Но если они одинаковые — это ещё не значит, что они лежат в одном и том же месте.
В агде, если мой эклер меня не обманывает, требуется равенство по значению. А есть ли зависимые типы с равенством по ссылке? То есть, для того, чтобы
Такое где-нибудь есть?
Update: подсказали, что это, вроде, называется "path dependent types".
А вот во всяких джавах с сиплюсплюсами равенств как минимум два. Не помню точно, как они называются, но, в общем, равенство по ссылке и по значению. Первое сильнее второго. То есть, если какие-то штуки лежат в одном и том же месте, то это одна и та же штука, и, значит, они одинаковые. Но если они одинаковые — это ещё не значит, что они лежат в одном и том же месте.
В агде, если мой эклер меня не обманывает, требуется равенство по значению. А есть ли зависимые типы с равенством по ссылке? То есть, для того, чтобы
Vector n Int был тем же типом, что и Vector m Int нужно не только n=m, нужно, чтобы n и m были одной и той же переменной.Такое где-нибудь есть?
Update: подсказали, что это, вроде, называется "path dependent types".
no subject
Date: 2013-02-03 08:04 pm (UTC)no subject
Date: 2013-02-03 08:11 pm (UTC)no subject
Date: 2013-02-03 09:04 pm (UTC)no subject
Date: 2013-02-03 09:40 pm (UTC)те мы можем ссылаться на type member-ы pure value-ов, и тип у нас реально зависит от значения
no subject
Date: 2013-02-03 09:42 pm (UTC)def xyz(a: BBB): a.T = {...}no subject
Date: 2013-02-04 04:22 am (UTC)no subject
Date: 2013-02-04 05:44 am (UTC)no subject
Date: 2013-02-04 07:09 am (UTC)no subject
Date: 2013-02-04 07:23 am (UTC)scala> class X {class Y; def test(y: Y) {}} defined class X scala> val x = new X; x: X = X@1194cf5 scala> val xx = new X; xx: X = X@17fc1e7 scala> val y = new x.Y y: x.Y = X$Y@5d174f scala> val yy = new xx.Y yy: xx.Y = X$Y@dfbabd scala> x.test(y) scala> xx.test(yy) scala> x.test(yy) :12: error: type mismatch; found : xx.Y required: x.Y x.test(yy) ^Или я что-то не понимаю, или x и xx не отличаются ничем, кроме физического расположения в памяти.
no subject
Date: 2013-02-04 09:53 am (UTC)class X {type Y; def test(y: Y) {}} val x: X = new X { Y = Int } val xx: X = new X {Y = Bool}Вот тут как раз это будет иметь смысл.
no subject
Date: 2013-02-04 10:00 am (UTC)Не понял это утверждение. Как говорится, "нет ничего страшного в том, чтобы помыть микроволновку". Пример показывает, что равенство значений ничего не даёт.
no subject
Date: 2013-02-04 04:46 am (UTC)