タプルと型一致しようとすると問題が発生します。
filterSth :: [a]->[b]->([a],[b])
filterSth _ [] = (_, [])
これは、2 番目の引数が空のリストの場合、返したいタプルの最初の要素を気にしないことを意味します。どうすればこれを実装できますか?
タプルと型一致しようとすると問題が発生します。
filterSth :: [a]->[b]->([a],[b])
filterSth _ [] = (_, [])
これは、2 番目の引数が空のリストの場合、返したいタプルの最初の要素を気にしないことを意味します。どうすればこれを実装できますか?
タプルの最初の要素を気にせず、それを使用しないことが確実な場合はundefined
、返すことができます。
filterSth _ [] = (undefined, [])
評価しようとするundefined
と実行時例外が発生することに注意してください。
別のアイデアは、代わりに戻ることかもしれませんEither ([a], [b]) [b]
。
filterSth :: [a] -> [b] -> Either ([a], [b]) [b]
filterSth _ [] = Right []
-- and a case for a non-empty second argument
最初の引数を変更せずに返したい場合は、 を使用できません_
。_
引数の値が何であるかを気にせず、それを使用しないことを意味します。それを_
使用するので、名前付き引数に置き換えて明示的に返す必要があります
filterSth a [] = (a, [])
タプルの最初のコンポーネントとして返すものを気にしない場合は、誤って使用すると爆発するエラーを返すことをお勧めします。
filterSth _ [] = (error "Don't use this", [])