5

私は現在、プリミティブ算術関数の小さなShowインスタンスを作成しようとしています。

目標は、関数のリストを表示可能にすることです。

showの非常に単純な関数は次のようになります。

  showOp :: (Int -> Int -> Int) -> String
  showOp op
    | op 3 3 == 6 = "plus"
    | op 3 3 == 0 = "minus"
    | op 3 3 == 9 = "times"
    | op 3 3 == 1 = "divide"
    | otherwise = "undefined"

しかし、Show for(Int-> Int-> Int)のインスタンスを取得できません。私はそのようにそれを試しました:

    instance Show (Int -> Int -> Int) where
    show op = show "asdf"

しかし、それは機能しません。WinHugsはエラーを返すだけです

    Syntax error in instance head (variable expected)

関数の表示を定義することも可能ですか?もしそうなら、どうすればその問題に取り組むことができますか?

4

3 に答える 3

6

WinHug を使用しないでください。GHCを使用。

実際、最近の Haskell Platform バージョンには、Show の関数のインスタンスが既に存在します。

Prelude Text.Show.Functions> show (+1)
"<function>"
Prelude Text.Show.Functions> show (\x -> x ++ "foo")
"<function>"

ただし、あなたの場合、-XFlexibleInstancesインスタンスは(Constructor a1 .. an)a1 .. an が異なる型変数である形式ではないため、オンにする必要があります。

でオンにします{-# LANGUAGE FlexibleInstances #-}

于 2012-05-11T12:40:43.153 に答える
1

ハグも使用できます。

hugs -98 +oまたはでHugsを起動し、ソースファイルrunhugs -X-98 +oで使用します。{-# LANGUAGE FlexibleInstances #-}

于 2012-05-12T08:05:42.273 に答える