私が使用するたびにfix :: (a -> a) -> a
、それはタイプになっています
((a -> b) -> a -> b) -> a -> b
いくつかのa
とb
。fix
のような些細なこと以外に、その型パラメーターが関数型にインスタンス化されていない場所の実際のアプリケーションはありますfix (const 0)
か? 署名を最も一般的なままにしておく目的は何ですか?
私が使用するたびにfix :: (a -> a) -> a
、それはタイプになっています
((a -> b) -> a -> b) -> a -> b
いくつかのa
とb
。fix
のような些細なこと以外に、その型パラメーターが関数型にインスタンス化されていない場所の実際のアプリケーションはありますfix (const 0)
か? 署名を最も一般的なままにしておく目的は何ですか?
フィボナッチ数列。例:
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]
ます。