haskellに関数fromString
が存在しますか?私は、文字列をa
に変換する以外に、a
がBoolean
かどうかを確認することができます。私たちを手伝ってくれますか ?fromString haskell - 返された型のチェックwith
答えて
fromString
は、タイプライブラリIsString
の関数として既に存在しています。主な用途は、コンパイルオプション(-XOverloadedStrings
)で、Haskellが持っているすべての異なる文字列の実装に文字列リテラルを使用できるようにすることです。厳密な/怠惰なByteStringと厳密な/怠惰なテキストが、他のインスタンスがあります。 URL、ファイルパス、その他のために。
あなたは両方ともと言い換えます。とチェックの両方の操作があります。コンバージョンについては、read
を使用することをおすすめします。
main = do putStr "Enter a boolean:"
inp <- getLine
let b = read inp
if b then putStrLn "You entered True"
else putStrLn "You entered False"
ただし、ユーザーが入力しなかった場合のいずれかTrue
またはFalse
、read
は、エラーがスローされます。ここではブール値に文字列を変換する簡単なプログラムです。有効な入力があることがわかっている場合、または入力が無効であれば問題なく終了する場合は、read
を使用してください。無効な入力をチェックする必要がある場合は
は、私が最も簡単な方法は、単に独自の関数を書くことだと思う - 少なくともBool
とInt
のような単純なタイプのために:
readBool :: String -> Maybe Bool
readBool str | str == "True" = Just True
| str == "true" = Just True
| str == "False" = Just False
| str == "false" = Just False
| otherwise = Nothing
import Data.Char
readInt :: String -> Maybe Int
readInt str | all isDigit str = Just (read str)
| otherwise = Nothing
なおread
への呼び出しでreadInt
は、入力が有効であることを既に確認しているので決して失敗しないはずです。
使用read
:
λ> :t read
read :: Read a => String -> a
λ> read "42" :: Int
42
λ> read "True" :: Bool
True
λ> read "\"a string\"" :: String
"a string"
λ> read "[1,2,3]" :: [Int]
[1,2,3]
あなたは与えられた文字列ではなくNothing
で、解析できなかった場合read
はエラーを返しますので、あなたの入力が有効であることを確認することができない限り、しかし、私はread
はお勧めしません。代わりに独自の関数を実装してみてください(Maybe
やEither
などのモナドを使用することをお勧めします)。
readMaybe
をText.Read
から使用してください。値が解析され得ることができなかった場合は(別名read
がエラーを投げるかの)Nothing
を返します。もちろん
import Text.Read (readMaybe)
isInteger :: String -> Bool
isInteger xs = (readMaybe xs :: Maybe Integer) /= Nothing
isBool :: String -> Bool
isBool xs = (readMaybe xs :: Maybe Bool) /= Nothing
、あなたが実際に使用Integer
またはBool
する場合は、あなたがreadMaybe
の結果を使用します:readMaybe
はプレリュードで利用可能であるreads
を使用
isPositive :: String -> Either String Bool
isPositive xs = case readMaybe xs :: Maybe Integer of
Just n -> Right (n > 0)
Nothing -> Left "Not an Integer"
留意されたいです。 read
とRead
のインスタンスがどのように動作するかを知りたい場合は、readMaybe
をreads
に再実装することをお勧めします。
- 1. 返される型のチェックPEP 484
- 2. 関数内のHaskell型式メーターのチェック
- 3. Haskell/GHC UnndecidableInstances - 非終了型チェックの例?
- 4. SWIGの型チェックとオーバーロードされたメソッド
- 5. ランダムジェネレータデータ型でパラメータ化されたHaskellデータ型
- 6. MySQL with Haskell with Windows
- 7. Haskellで推論された型をチェックするときに、型が可変ではない引数
- 8. チェックされたラジオボタンのテキストを返す
- 9. Haskell関数が存在型を返す
- 10. メールリーダーwith haskell
- 11. Haskellのネストされた代数的データ型
- 12. LINQヘルプ返されたセットのデータ型
- 13. Haskellで作成された型から値を取得する
- 14. (エミュレートされた)Haskellのマクロ?
- 15. Haskellの型宣言
- 16. Haskellのデータ型エラー
- 17. Haskellの型宣言
- 18. Haskellのデータ型が
- 19. Haskellコンストラクタ型パターンマッチング
- 20. SQLiteでデータ型がチェックされない
- 21. ネストされたHaskellのであれば
- 22. FFI Haskellコールバックwith状態
- 23. 型クラスのHaskell型の分解能
- 24. Haskellの戻り値の型多型
- 25. パラメータ化された型のチェックされていないキャスト警告
- 26. Haskell再帰型クラス
- 27. Haskell "not"型制約
- 28. SQLクエリから返された複数の値のチェック
- 29. 部分的に適用された型のデータコンストラクタをHaskellで作成する
- 30. 型エイリアス宣言のHaskell型クラス
'read'? ...私はあなたの質問を理解するいくつかの問題を抱えています - あなたはいくつかの例を追加するか、それを修正しようとしますか? – Carsten
私の考えでは、この質問は普遍的な 'readDyn :: String - > Maybe Dynamic'を求めています。これは何かを読むことができ、' Dynamic'がこれかそのタイプかどうかテストすることができます。 – chi