А вот скажите, пожалуйста, та идея что присваивание полю структуры может менять не только значение, но и тип структуры, она помимо кметтовских линз где-нибудь еще в статически типизированных языках реализована?
> ('z', True) & _1 .~ 42
(42, True)
UPD. Мне тут делают совершенно резонное замечание, что стандартный синтаксис модификации записей в
(
Read more... )
в 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
Reply
> case class Foo[T](Bar:T,Baz:Int)
> var a = Foo(123,456)
a: Foo[Int]
> a.copy(Bar="789")
-: Foo[String]
С F# мне лень гуглить, да и пробовать негде дома.
Reply
def copy[S](Bar: S = Bar, Baz: Int = Baz) = Foo(Bar, Baz)а не особая синтаксическая конструкция.
Reply
Reply
Reply
Вот буквально на днях передали в функцию Seq(Seq(OurCoolType)) вместо Seq(OurCoolType), оно привелось к Any и скомпилировалось! Ловили в рантайме.
Или, полгода назад, опечатавшись, отправили актёру classOf вместо самого значения. Опять же, компилятор вывел общий тип и схавал.
Как будто как в детстве на JS пишешь.
Reply
А вообще подобные штуки даже в Хаскеле встречаются. Нет, я не спорю, что система с сабтайпингом слабее системы без него. Но всё же она на светлой стороне Силы.
Вы, наверное, даже на JS писали, как будто он статически типизированный.
Reply
Reply
Reply
Reply
Leave a comment