@@ -164,63 +164,22 @@ by adding extension methods for its functionality:
164
164
you created in the previous exercise.
165
165
166
166
<div class =" solution " >
167
- ``` scala mdoc:reset:invisible
168
- trait Display [A ] {
169
- def display (value : A ): String
170
- def print (value : A ): Unit =
171
- println(display(value))
172
- }
173
- ```
174
-
175
167
First we define ` DisplaySyntax ` with the extension methods we want.
176
168
177
169
``` scala mdoc:silent
178
170
object DisplaySyntax {
179
171
extension [A ](value : A )(using p : Display [A ]) {
180
172
def display : String = p.display(value)
181
- def print : Unit = p .print(value)
173
+ def print : Unit = Display .print(value)
182
174
}
183
175
}
184
176
```
185
177
186
178
Now we can show everything working by calling ` print ` on a ` Cat ` .
187
179
188
- ``` scala mdoc:reset:invisible
189
- trait Display [A ] {
190
- def display (value : A ): String
191
- def print (value : A ): Unit =
192
- println(display(value))
193
- }
194
- object Display {
195
- given Display [String ] with {
196
- def display (value : String ) = value
197
- }
198
-
199
- given Display [Int ] with {
200
- def display (value : Int ) = value.toString
201
- }
202
- }
203
-
204
- object DisplaySyntax {
205
- extension [A ](value : A )(using p : Display [A ]) {
206
- def display : String = p.display(value)
207
- def print : Unit = println(value.display)
208
- }
209
- }
210
- final case class Cat (name : String , age : Int , color : String )
211
- ```
212
180
``` scala mdoc
213
181
import DisplaySyntax .*
214
182
215
- given Display [Cat ] with {
216
- def display (cat : Cat ): String = {
217
- val name = cat.name.display
218
- val age = cat.age.display
219
- val color = cat.color.display
220
- s " $name is a $age year-old $color cat. "
221
- }
222
- }
223
-
224
183
Cat (" Garfield" , 41 , " ginger and black" ).print
225
184
```
226
185
0 commit comments