私はFoldable
種類ハスケルの「無限」折り畳み構造のk番目の要素を見つけるには?
safeIndex :: (Foldable t, Integral i) => t a -> i -> Maybe a
safeIndex = foldr step (const Nothing)
where
step :: Integral i => a -> (i -> Maybe a) -> i -> Maybe a
step x f i = if i == 0
then Just x
else f (i - 1)
に取り組んでいます。しかし、それは無限リストのために動作しない機能、safeIndex
を定義したいと思います。 foldr
が途中で止まるようにするには、最初の引数がstep
の場合にのみ停止する必要があるかどうかを判断する必要があります。
無限の構造で機能するように関数を修正することはできますか?そうでない場合は、どのタイプタイルを制限する必要がありますかt
?
ここで 'forall'を使うのはなぜですか? –
それ以外の場合、 'step'の明示的な型シグネチャはコンパイルされません。 'ScopedTypeVariable'言語拡張を有効にしました: –
' safeIndex [1 ..] 3'は 'Just 4'を出力します。しかし、それは無限のsnocリストでは機能しませんが、最初から「右からインデックスを付ける」のは意味がありません。 –