Какой тип имеет функция? - PullRequest
       4

Какой тип имеет функция?

4 голосов
/ 10 августа 2011

Я пропустил удобный оператор haskell $, поэтому я решил ввести его.

class Applayable[-R,T] (val host : Function[R,T]) {
  def $: R=>T = host.apply
}
implicit def mkApplayable[R,T] (k : Function[R,T]) : Applayable[R,T] = new Applayable(k)

Он отлично сработал для

val inc : Int => Int = _ + 1
inc $ 1

, но не справился с

def inc(x:Int) : Int = x+1
inc $ 1

Какой тип я должен указать для неявного приведения для преобразования def определения в экземпляр Applayable?

Ответы [ 2 ]

7 голосов
/ 10 августа 2011

Вы не можете указать тип, чтобы делать то, что вы хотите: методы не являются функциями.Вы можете преобразовать метод в (возможно, частично примененную) функцию, добавив после него магическое подчеркивание, например:

def inc(x:Int) : Int = x+1
(inc _) $ 1
3 голосов
/ 10 августа 2011

вам нужно обработать метод inc как функцию, добавив '_'.Это работает:

inc _ $ 1
...