10

Idris で String を Integer または Natural に変換する最良の方法は何ですか?

標準ライブラリはまだ進行中の作業であることを知っているので、答えが標準ライブラリに追加する必要がある場合は、それを試してみるのも問題ありませんが、まだ方法がないことを確認する前に.

ユーザーからインデックスを読み取りたい場合、私が思いつくことができる最善の方法は次のとおりです。

indexAsString <- getLine
let indexAsInt : Integer = cast indexAsString
let items: Vect _ _ = ["shoe", "bat", "hat"]
let i = integerToFin indexAsInt $ length items
maybe (print "invalid index") (\ii => print $ index ii items) i

しかし、この方法では、キャストからの失敗の兆候はありません。indexAsString が Integer に変換できる形式ではない可能性があるという事実だけでなく、実行時に失敗することさえなく、「不正なキャスト」の結果として 0 が生成されます

より良い方法があることを教えてください、および/または正しい方向に向けてください。

余談ですが、Idris に Read 型クラスがない特別な理由はありますか? それともまだ入っていないだけですか?

事前にt​​hx。

4

2 に答える 2

7

Idris には型シグネチャにparseIntegerandparsePositive関数がありますData.String

Num a => Neg a => String -> Maybe a

Num a => String -> Maybe a

http://www.idris-lang.org/docs/current/base_doc/docs/Data.String.html

于 2016-02-27T13:20:28.580 に答える