Skip to content

Commit f72855e

Browse files
committed
addressed review comment
1 parent 8d00ed1 commit f72855e

10 files changed

+51
-56
lines changed

docs/docs/reference/contextual/implicit-by-name-parameters.md

Lines changed: 0 additions & 7 deletions
This file was deleted.

docs/docs/reference/contextual/import-delegate.md

Lines changed: 0 additions & 7 deletions
This file was deleted.

docs/docs/reference/contextual/import-implied.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

docs/docs/reference/contextual/inferable-by-name-parameters.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

docs/docs/reference/contextual/inferable-params.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

docs/docs/reference/contextual/instance-defs.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

docs/docs/reference/contextual/query-types-spec.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

docs/docs/reference/contextual/query-types.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

docs/docs/reference/new-types/dependent-function-types-spec.md

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,57 @@ type IDF = (x: C) ?=> x.M
6767

6868
```
6969

70-
- [eff-dependent.scala](https://github.com/lampepfl/dotty/blob/master/tests/run/eff-dependent.scala)
70+
In the following example the depend type `f.Eff` refers to the effect type `CanThrow`:
71+
72+
[eff-dependent.scala]: https://github.com/lampepfl/dotty/blob/master/tests/run/eff-dependent.scala
73+
74+
```scala
75+
trait Effect
76+
77+
// Type X => Y
78+
abstract class Fun[-X, +Y]:
79+
type Eff <: Effect
80+
def apply(x: X): Eff ?=> Y
81+
82+
class CanThrow extends Effect
83+
class CanIO extends Effect
84+
85+
given ct: CanThrow = new CanThrow
86+
given ci: CanIO = new CanIO
87+
88+
class I2S extends Fun[Int, String]:
89+
type Eff = CanThrow
90+
def apply(x: Int) = x.toString
91+
92+
class S2I extends Fun[String, Int]:
93+
type Eff = CanIO
94+
def apply(x: String) = x.length
95+
96+
// def map(f: A => B)(xs: List[A]): List[B]
97+
def map[A, B](f: Fun[A, B])(xs: List[A]): f.Eff ?=> List[B] =
98+
xs.map(f.apply)
99+
100+
// def mapFn[A, B]: (A => B) -> List[A] -> List[B]
101+
def mapFn[A, B]: (f: Fun[A, B]) => List[A] => f.Eff ?=> List[B] =
102+
f => xs => map(f)(xs)
103+
104+
// def compose(f: A => B)(g: B => C)(x: A): C
105+
def compose[A, B, C](f: Fun[A, B])(g: Fun[B, C])(x: A):
106+
f.Eff ?=> g.Eff ?=> C =
107+
g(f(x))
108+
109+
// def composeFn: (A => B) -> (B => C) -> A -> C
110+
def composeFn[A, B, C]:
111+
(f: Fun[A, B]) => (g: Fun[B, C]) => A => f.Eff ?=> g.Eff ?=> C =
112+
f => g => x => compose(f)(g)(x)
113+
114+
@main def test =
115+
val i2s = new I2S
116+
val s2i = new S2I
117+
118+
assert(mapFn(i2s)(List(1, 2, 3)).mkString == "123")
119+
assert(composeFn(i2s)(s2i)(22) == 2)
120+
```
71121

72122
### Type Checking
73123

docs/docs/reference/other-new-features/implicit-by-name-parameters.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)