2

どのような状況で関数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

enumFileRange4 つの引数があることを示していますが、上記のように 5 つの引数を渡して呼び出しますlet iter = enumHandleRange 4096 offset count h step

これがどのように、そしてどのような一般性で機能するかを誰かが知っていますか?

4

2 に答える 2