3

関数が定義されています

maybeToList :: (a -> Maybe a) -> a -> [a]
maybeToList f x = x : maybe [] (maybeToList f) (f x)

この機能は当たり前のように思えるので、標準ではないことが信じられません。いくつかのモジュールで定義されていますか (私はすでに Data.Maybe をチェックしています)?

4

1 に答える 1

6

あなたの関数は、次のような特殊な形式であるため、標準ライブラリにはありませ

unfoldr      :: (b -> Maybe (a, b)) -> b -> [a]
unfoldr f b  =
  case f b of
   Just (a,new_b) -> a : unfoldr f new_b
   Nothing        -> []

とは言っても、リストの要素がシード値の並びと同じになるケースはよくあることだし、justunfoldrやその他の標準関数で書くと下手なので、標準ライブラリにもない理由がわからない.

于 2012-12-06T01:16:21.953 に答える