Haskell にいわゆる C のようなキャストはありません。
文字列をパースしてある型の値を得る手軽な方法は Prelude.read
がありますが、これは入力文字列がパースに成功することを期待しています。失敗する可能性のある今回のような場合は Text.Read.readMaybe
をおすすめします。
haskell
1read :: Read a => String -> a
2readMaybe :: Read a => String -> Maybe a
また、リストの要素に対して変換に成功したものだけを抜き出す関数に Data.Maybe.mapMaybe
があります。
haskell
1mapMaybe :: (a -> Maybe b) -> [a] -> [b]
これらを組み合わせると次のように書けます(Wandbox で実行)。
haskell
1import Data.Maybe (mapMaybe)
2import Text.Read (readMaybe)
3
4main :: IO ()
5main = do
6 let
7 strings = ["a", "b", "0", "c", "99", "d"]
8 ints :: [Int]
9 ints = mapMaybe readMaybe strings
10 print ints
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/07/23 08:08