Idris に、Vect のサイズを渡して Vect を作成する関数と、パラメータでインデックスを取得する関数を書き込もうとしています。これまでのところ、私はこれを持っています:
import Data.Fin
import Data.Vect
generate: (n:Nat) -> (Nat -> a) ->Vect n a
generate n f = generate' 0 n f where
generate': (idx:Nat) -> (n:Nat) -> (Nat -> a) -> Vect n a
generate' idx Z f = []
generate' idx (S k) f = (f idx) :: generate' (idx + 1) k f
しかし、パラメーターで渡された関数が、Vect のサイズよりも小さいインデックスのみを取得していることを確認したいと思います。私はそれを試しました:
generate: (n:Nat) -> (Fin n -> a) ->Vect n a
generate n f = generate' 0 n f where
generate': (idx:Fin n) -> (n:Nat) -> (Fin n -> a) -> Vect n a
generate' idx Z f = []
generate' idx (S k) f = (f idx) :: generate' (idx + 1) k f
しかし、エラーでコンパイルされません
Can't convert
Fin n
with
Fin (S k)
私の質問は次のとおりです。私がやりたいことは可能ですか?