# Replace View Bounds

Well the scala community has decided to deprecate view bounds in Scala. I suspect it might have to do with brevity. Full discussion can be viewed here

Well looks like most of the `view bounds (<%)` can be converted to `context bounds`. Lets see different strategies that can help us do the same. Suppose we have:

```
scala> def foo[T <% Int](x: T):Int = x
foo: [T](x: T)(implicit evidence\$1: T => Int)Int

scala> implicit def a[T](n:T) = n match {
| case x:String => x.toInt
| }
warning: there were 1 feature warning(s); re-run with -feature for details
a: [T](n: T)Int

scala> foo("23")
res4: Int = 23

```

To convert it to `context bound` we need to implicitly have something that does `T => Int`. We could:

```
scala> type L[X] = X => Int
defined type alias L

scala> def goo[T : L](x: T):Int = x
goo: [T](x: T)(implicit evidence\$1: T => Int)Int

scala> goo(23)
res2: Int = 23

```

We could combine the type declaration with the function definition as:

```
scala> def goo[T : ({type L[X] = X => Int})#L](x: T):Int = x
goo: [T](x: T)(implicit evidence\$1: T => Int)Int

//quite cryptic though
```

```
scala> def goo2[T](x: T)(implicit ev: T => Int):Int = x
goo2: [T](x: T)(implicit ev: T => Int)Int

scala> goo2("12")
res8: Int = 12
```

More generalized version:

```
scala> def goo[E,T : ({type L[X] = X => E})#L](x: T):E = x
goo: [E, T](x: T)(implicit evidence\$1: T => E)E

scala> def goo2[T, E](x: T)(implicit ev: T => E):E = x
goo2: [T, E](x: T)(implicit ev: T => E)E

scala> goo("1000")
res10: String = 1000

scala> goo2("1000")
res11: String = 1000

```