Присваивание

Jan 27, 2016 19:20

А вот скажите, пожалуйста, та идея что присваивание полю структуры может менять не только значение, но и тип структуры, она помимо кметтовских линз где-нибудь еще в статически типизированных языках реализована?

> ('z', True) & _1 .~ 42
(42, True)
UPD. Мне тут делают совершенно резонное замечание, что стандартный синтаксис модификации записей в ( Read more... )

lens, haskell

Leave a comment

max630 January 27 2016, 21:24:11 UTC
> стандартный синтаксис модификации записей в Хаскеле обладает этим свойством

в ocaml то же самое:

# type 'a foo = { bar : 'a; baz : int };;
type 'a foo = { bar : 'a; baz : int; }
# let a = { bar = "hello"; baz = 1 };;
val a : string foo = {bar = "hello"; baz = 1}
# { a with bar = 1 } ;;
- : int foo = {bar = 1; baz = 1}

Reply

deni_ok January 28 2016, 13:51:52 UTC
А F# или Scala как, не знаете?

Reply

max630 January 28 2016, 14:00:47 UTC
в scala case class делал то же самое. Примерно так (скальные конструкции нагуглены и сразу же забыты, пишу что помню):

> case class Foo[T](Bar:T,Baz:Int)
> var a = Foo(123,456)
a: Foo[Int]
> a.copy(Bar="789")
-: Foo[String]

С F# мне лень гуглить, да и пробовать негде дома.

Reply

migmit January 28 2016, 17:00:37 UTC
Строго говоря, copy - это просто автосгенерённый метод с дефолтными аргументами:
def copy[S](Bar: S = Bar, Baz: Int = Baz) = Foo(Bar, Baz)а не особая синтаксическая конструкция.

Reply

nealar January 28 2016, 14:01:42 UTC
В скалке динамическая типизация же! Мутабельность + наследование.

Reply

migmit January 28 2016, 17:01:18 UTC
А вот это грубо. Сабтайпинг - это ещё не динамическая типизация.

Reply

nealar January 29 2016, 08:36:39 UTC
На практике ощущается именно так.
Вот буквально на днях передали в функцию Seq(Seq(OurCoolType)) вместо Seq(OurCoolType), оно привелось к Any и скомпилировалось! Ловили в рантайме.

Или, полгода назад, опечатавшись, отправили актёру classOf вместо самого значения. Опять же, компилятор вывел общий тип и схавал.

Как будто как в детстве на JS пишешь.

Reply

migmit January 29 2016, 08:40:16 UTC
Откуда вы только взяли этот classOf...

А вообще подобные штуки даже в Хаскеле встречаются. Нет, я не спорю, что система с сабтайпингом слабее системы без него. Но всё же она на светлой стороне Силы.

Вы, наверное, даже на JS писали, как будто он статически типизированный.

Reply

nealar January 29 2016, 13:03:00 UTC
Скобки поставить забыли.

Reply

migmit January 29 2016, 13:15:41 UTC
А, объект-компаньон. Так бы и сказали.

Reply

nealar January 29 2016, 18:15:11 UTC
Я уже не помню.

Reply


Leave a comment

Up