どのような状況で関数f :: a -> b -> c -> d
を定義できますか
f w x y z = ...
これが可能だとは思いませんでしたが、enumerator
パッケージを調べたところ、次のことがわかりました。
enumFileRange :: FilePath
-> Maybe Integer -- ^ Offset
-> Maybe Integer -- ^ Maximum count
-> Enumerator B.ByteString IO b
enumFileRange path offset count step = do
h <- tryIO (IO.openBinaryFile path IO.ReadMode)
let iter = enumHandleRange 4096 offset count h step
Iteratee (Exc.finally (runIteratee iter) (IO.hClose h))
明らかに、4 つの引数を渡すことによって実装される 3 つの引数の関数があります。同様に、 の署名enumHandleRange
は
enumHandleRange :: MonadIO m
=> Integer -- ^ Buffer size
-> Maybe Integer -- ^ Offset
-> Maybe Integer -- ^ Maximum count
-> IO.Handle
-> Enumerator B.ByteString m b
enumFileRange
4 つの引数があることを示していますが、上記のように 5 つの引数を渡して呼び出しますlet iter = enumHandleRange 4096 offset count h step
。
これがどのように、そしてどのような一般性で機能するかを誰かが知っていますか?