Implementando una interfaz con function parametrizada

Supongamos que tengo una interfaz

interface A { fun calculate(n: Int): Int } 

Me gustaría implementar A en una class B (por ejemplo) para que el calculation se proporcione en el constructor de B , algo así como:

 class B (f : (Int) -> Int) : A { override fun calculate(n: Int): Int //...somehow assign f to calculate } 

¿Se puede hacer esto sin que f una propiedad de B ?

Hmm … esto funciona:

 interface A { val calculate: (n: Int) -> Int } class B(f: (Int) -> Int) : A { override val calculate = f } 

¿Puede alguien explicar la diferencia sintáctica prevista entre fun y val aquí? Estoy al tanto de la definición de la function: diversión vs val pero me gustaría get una comprensión de "nivel de idioma".