А вот скажите, пожалуйста, та идея что присваивание полю структуры может менять не только значение, но и тип структуры, она помимо кметтовских линз где-нибудь еще в статически типизированных языках реализована?
> ('z', True) & _1 .~ 42
(42, True)
UPD. Мне тут делают совершенно резонное замечание, что стандартный синтаксис модификации записей в
(
Read more... )
Comments 18
Reply
> data X a = X {a :: a, b :: Int} deriving Show
> let x = X 10 12
> :t x
x :: Num a => X a
> let y = x {a = "adf"}
> :t y
y :: X [Char]
Reply
Reply
Reply
Reply
в 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
> let x = 6 * 7 :: Int
> let p3 = Pair True x
> :sprint p3
p3 = Pair True _
> let p4 = p3 {fstP = x}
> :sprint p4
p4 = _
> sndP p4
42
> :sprint p4
p4 = Pair 42 42
> :sprint p3
p3 = Pair True 42
Reply
Leave a comment