任意の関数のHListを任意の値に適用するにはどうすればよいですか?

ウィリアム・カーター

任意のFunction1[I, ?]sのリストを任意の入力に適用できるようにしたいと思いますIこれは私がこれまでに持っているものです:

    type StringInputFunction[T] = Function[String, T]

    val strLen: String => Int = _.length
    val strRev: String => String = _.reverse

    val functions = strLen :: strRev :: HNil
    val expected = 4 :: "evif" :: HNil

    object applyTo5 extends (StringInputFunction ~> Id) {
      override def apply[T](f: StringInputFunction[T]): Id[T] = f("five")
    }
    def applyFunctionsTo5[FH <: HList, OH <: HList](fs: FH)
        (implicit constrain: UnaryTCConstraint[FH, StringInputFunction],
         mapper: Mapper.Aux[applyTo5.type, FH, OH]): mapper.Out = {
      fs.map(applyTo5)
    }
    applyFunctionsTo5(functions) shouldBe expected

    class ApplyTo(string: String) extends (StringInputFunction ~> Id) {
      override def apply[T](f: StringInputFunction[T]): Id[T] = f(string)
    }
    def applyFunctionsTo[FH <: HList, OH <: HList]
        (fs: FH, input: String)
        (implicit constrain: UnaryTCConstraint[FH, StringInputFunction],
         mapper: Mapper.Aux[ApplyTo, FH, OH]): mapper.Out = {
      val applyTo = new ApplyTo(input)
      fs.map(applyTo)
    }
    applyFunctionsTo(functions, "five") shouldBe expected

これにより、コンパイルエラーが発生します。

ShapelessSpec.scala:81: could not find implicit value for parameter mapper: shapeless.ops.hlist.Mapper[applyTo.type,FH]
      fs.map(applyTo)
ShapelessSpec.scala:83: could not find implicit value for parameter mapper: shapeless.ops.hlist.Mapper.Aux[ApplyTo,shapeless.::[String => Int,shapeless.::[String => String,shapeless.HNil]],OH]
    applyFunctionsTo(functions, "five") shouldBe expected
  1. これを修正して任意のString入力で機能させるにはどうすればよいですか?
  2. これをさらにジェネリック化して、任意の入力タイプで機能するように変更できますTか?
トラビスブラウン

私は以前にこの正確な操作をしたことがあると思っていましたが、数年前からこの要点を見つけることができましたそこでの私の例を要約すると、Shapelessによってすでに提供されている操作のみを使用して、値レベルの通常のリストでこのようなことを行うのとよく似た方法で、これを非常にうまく行うことができます。次の設定があるとします。

import shapeless.{ ::, HNil }

val strLen: String => Int = _.length
val strRev: String => String = _.reverse

val functions = strLen :: strRev :: HNil

次に、これを書くことができます:

scala> functions.zipApply(functions.mapConst("five"))
res0: Int :: String :: shapeless.HNil = 4 :: evif :: HNil

またはこれ:

scala> def foo(in: String) = functions.zipApply(functions.mapConst(in))
foo: (in: String)Int :: String :: shapeless.HNil

scala> foo("six")
res1: Int :: String :: shapeless.HNil = 3 :: xis :: HNil

これは、特定のタイプに適用された特定のタイプの関数のリストで機能します。

要旨はいくつかの代替アプローチを提供しますが、それにzipApply加えmapConstて私にとっては断然最高感じています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

任意の関数のHListを任意の値に適用するにはどうすればよいですか?

分類Dev

変数の最後にある任意の変数に適用できる関数を実行するにはどうすればよいですか?

分類Dev

任意の関数をQuickCheckするにはどうすればよいですか

分類Dev

Pythonで任意のユーザー定義の目的関数にCMA-ES最適化を適用するにはどうすればよいですか?

分類Dev

Kotlinで、任意の数の関数をチェーンするにはどうすればよいですか?

分類Dev

golangの任意の関数に適合した関数型を定義するにはどうすればよいですか

分類Dev

(任意の)引数を使用して(任意の)関数を呼び出す関数を実装するにはどうすればよいですか?

分類Dev

Goで任意の2つの大きな数値を追加するにはどうすればよいですか?

分類Dev

数値(任意の数値)を100で切り捨てるにはどうすればよいですか?

分類Dev

関数を任意の数で機能させるにはどうすればよいですか?

分類Dev

任意のキーでトラップ関数を作成するにはどうすればよいですか

分類Dev

Pythonの1回の関数呼び出しでデフォルト値と任意の引数を使用するにはどうすればよいですか?

分類Dev

PhantomJSを任意のWebサイトで適切に使用するにはどうすればよいですか?

分類Dev

別の変数の任意の数の前の値に依存するダミーを作成するにはどうすればよいですか?

分類Dev

次に、tibbleの特定の列に関数を適用するにはどうすればよいですか?

分類Dev

Javaで任意のタイプの任意の数の引数を受け入れるメソッドを作成するにはどうすればよいですか?

分類Dev

任意の数のRDDを効率的に結合するにはどうすればよいですか?

分類Dev

任意の数の引数を受け入れるJavascriptでこの関数を改善するにはどうすればよいですか?

分類Dev

複数の条件でRにRLE()関数を適用するにはどうすればよいですか?

分類Dev

複数の条件でRにRLE()関数を適用するにはどうすればよいですか?

分類Dev

文字列内の「x」または「任意の数」を検索するにはどうすればよいですか?

分類Dev

Rのsapply関数に特定の列を適用するにはどうすればよいですか?

分類Dev

ファイル内の任意の文字列を検索できるように関数を作成するにはどうすればよいですか?

分類Dev

任意のディレクトリのスクリプトにタブ補完を適用するにはどうすればよいですか?

分類Dev

PyMCの変数にカスタム関数を適用するにはどうすればよいですか?

分類Dev

関数を複数の要素に適用するにはどうすればよいですか?

分類Dev

Elmで目的の順序で関数を部分的に適用するにはどうすればよいですか?

分類Dev

空白を任意の数の空白に置き換えるにはどうすればよいですか?

分類Dev

Goで任意の数の引数を受け入れる関数タイプを定義するにはどうすればよいですか?

Related 関連記事

  1. 1

    任意の関数のHListを任意の値に適用するにはどうすればよいですか?

  2. 2

    変数の最後にある任意の変数に適用できる関数を実行するにはどうすればよいですか?

  3. 3

    任意の関数をQuickCheckするにはどうすればよいですか

  4. 4

    Pythonで任意のユーザー定義の目的関数にCMA-ES最適化を適用するにはどうすればよいですか?

  5. 5

    Kotlinで、任意の数の関数をチェーンするにはどうすればよいですか?

  6. 6

    golangの任意の関数に適合した関数型を定義するにはどうすればよいですか

  7. 7

    (任意の)引数を使用して(任意の)関数を呼び出す関数を実装するにはどうすればよいですか?

  8. 8

    Goで任意の2つの大きな数値を追加するにはどうすればよいですか?

  9. 9

    数値(任意の数値)を100で切り捨てるにはどうすればよいですか?

  10. 10

    関数を任意の数で機能させるにはどうすればよいですか?

  11. 11

    任意のキーでトラップ関数を作成するにはどうすればよいですか

  12. 12

    Pythonの1回の関数呼び出しでデフォルト値と任意の引数を使用するにはどうすればよいですか?

  13. 13

    PhantomJSを任意のWebサイトで適切に使用するにはどうすればよいですか?

  14. 14

    別の変数の任意の数の前の値に依存するダミーを作成するにはどうすればよいですか?

  15. 15

    次に、tibbleの特定の列に関数を適用するにはどうすればよいですか?

  16. 16

    Javaで任意のタイプの任意の数の引数を受け入れるメソッドを作成するにはどうすればよいですか?

  17. 17

    任意の数のRDDを効率的に結合するにはどうすればよいですか?

  18. 18

    任意の数の引数を受け入れるJavascriptでこの関数を改善するにはどうすればよいですか?

  19. 19

    複数の条件でRにRLE()関数を適用するにはどうすればよいですか?

  20. 20

    複数の条件でRにRLE()関数を適用するにはどうすればよいですか?

  21. 21

    文字列内の「x」または「任意の数」を検索するにはどうすればよいですか?

  22. 22

    Rのsapply関数に特定の列を適用するにはどうすればよいですか?

  23. 23

    ファイル内の任意の文字列を検索できるように関数を作成するにはどうすればよいですか?

  24. 24

    任意のディレクトリのスクリプトにタブ補完を適用するにはどうすればよいですか?

  25. 25

    PyMCの変数にカスタム関数を適用するにはどうすればよいですか?

  26. 26

    関数を複数の要素に適用するにはどうすればよいですか?

  27. 27

    Elmで目的の順序で関数を部分的に適用するにはどうすればよいですか?

  28. 28

    空白を任意の数の空白に置き換えるにはどうすればよいですか?

  29. 29

    Goで任意の数の引数を受け入れる関数タイプを定義するにはどうすればよいですか?

ホットタグ

アーカイブ