10

私が使用するたびにfix :: (a -> a) -> a、それはタイプになっています

((a -> b) -> a -> b) -> a -> b

いくつかのabfixのような些細なこと以外に、その型パラメーターが関数型にインスタンス化されていない場所の実際のアプリケーションはありますfix (const 0)か? 署名を最も一般的なままにしておく目的は何ですか?

4

3 に答える 3

5

フィボナッチ数列。例:

fibs = fix ((1:) . (1:) . (zipWith (+) <*> tail))

またはforever関数:

forever x = fix (x >>)

または、フィボナッチ数列の別のバリアント:

fibs :: State (Int, Int) [Int]
fibs = fix $ \loop -> do
    (x, y) <- get
    put (y, y + x)
    (x :) <$> loop

main = print $ take 15 $ fst $ runState fibs (1, 1)

印刷し[1,1,2,3,5,8,13,21,34,55,89,144,233,377,610]ます。

于 2015-01-20T02:49:11.570 に答える