Haskellの実験を始めましたが、問題があります。qqqは、「Nothing」で呼び出された場合は1つの文字列を出力し、「Justsomething」で呼び出された場合は他の文字列を出力する関数です。
最初の試みはうまくいったようです:
qqq Nothing = print "There isn't anything to be printed."
qqq (Just x) = print "There is something to be printed." >> print x
main :: IO ()
main = qqq (Just 43)
だが:
- 失敗させようとする
main = qqq (Nothing)と(「制約内のあいまいな型変数 `a0':(a0を表示)'qqq'の使用から生じる") - 失敗した場合に型署名を追加したい場合:
qqq :: Maybe x => x -> IO ()->Type constructor 'Maybe' used as a class->でも、そうではありませんか?
qqq :: (Maybe x) -> IO ()。これで、署名自体が成功したように見えます。しかし、場合のようにmain = qqq (Just 43)その不思議な(Show a0)エラーで失敗し始めますmain = qqq (Nothing)。
質問:
- でqqqを呼び出すこと
Nothingが、で呼び出すのと非常に異なるのはなぜJust 43ですか? - 何
(Show a0)ですか?エラーメッセージでのみ言及されています。これを使用しようとすると、「スコープ内に表示されない」などの結果になります。 - このための正しい型署名とは何ですか?Haskellの型注釈を推測する方法は?次のようなものを期待しています:
f 0 = 2
f x = (f (x-1)) + 3
main = print get_type_as_string(f)
-- prints "Number -> Number"