let
Services = "Services.lf" // import system services
load "LanguageOfTraits.lf" // import language support for traits
in
let
TReadInt =
let
readInt = (\():: Services.Print "Input number: ";
Services.StringToInt (Services.ReadString (||)))
TReadIntProvides =
(|
readInt = (\():: (self (||)).setIntField (| aIntField = readInt (||) |))
|)
TReadIntRequires =
(|
readInt = (| setIntField = "Int -> Unit" |)
|)
in
trait "TReadInt" provides TReadIntProvides requires TReadIntRequires
end
TWriteInt =
let
writeInt = (\aArg:: Services.Print "TWriteInt.writeInt: ";
Services.PrintLn aArg )
TWriteIntProvides =
(|
writeInt = (\():: writeInt ((self (||)).getIntField (||)) )
|)
TWriteIntRequires =
(|
writeInt = (| getIntField = "Unit -> Int" |)
|)
in
trait "TWriteInt" provides TWriteIntProvides requires TWriteIntRequires
end
in
trait "TIntGetter"
join (refine TReadInt aliases (| readInt = "get" |))
with (refine TWriteInt aliases (| writeInt = "set" |))
end
end
|