2017-06-13 10 views
0

私は、次の機能があります。もっと安全にするには?

はその後、私は例外を持って
isElemChar 5 

<interactive>:73:12: error: 
    * No instance for (Num Char) arising from the literal `5' 
    * In the first argument of `isElemChar', namely `5' 
     In the expression: isElemChar 5 
     In an equation for `it': it = isElemChar 5 
*Cipher Data.Char> isElemChar 'a' 

にする方法私は次のように機能を使用しようとすると

isElemChar :: Char -> Bool 
isElemChar x = elem x ['A'..'Z'] || elem x ['a'..'z'] 

をより安全な機能ですか?それは、それが機能を発揮するための正しいアプローチでしょうか?

Maybeデータ型を使用できますが、実装方法はわかりません。

+0

「Char」を受け入れる関数に数値を渡そうとしています。 'isElemChar '5'を試してください。 – Cirdec

+0

例外を処理するには、ユーザーが代わりに5を渡す場合、「5」? –

答えて

11

あなたの機能です。あなたが言及している "例外"は、実際にはコンパイル時のエラーです。これは正確にエラーが発生する時間です。

これは少しあなたが対話プロンプトにいるという事実によって隠されていますが、プログラムsafe.hs ....

isElemChar :: Char -> Bool 
isElemChar x = elem x ['A'..'Z'] || elem x ['a'..'z'] 

main = print $ isElemChar 5 

を書いた...そしてあなたはそれをコンパイルしようとした場合され...

ghc safe.hs 

...あなたは

safe.hs:5:27: error: 
    • No instance for (Num Char) arising from the literal ‘5’ 
    • In the first argument of ‘isElemChar’, namely ‘5’ 
     In the second argument of ‘($)’, namely ‘isElemChar 5’ 
     In the expression: print $ isElemChar 5 
0

同様のエラーになるだろうsの機能をより行う必要はありませんああ、これはPythonではない、関数paramsは型を持っているので、あなたのコードはただcompile errorを与えるでしょう。 IOを扱っている場合、常にIO([Char])またはIO(Char)が得られます。

関連する問題