scmCallWithFile :: IOMode -> (Handle -> ScmValue) -> String
                -> [ScmValue] -> IO (ErrOr ScmValue)
scmCallWithFile mode toPort _ [s, ScmFunc _ f] | isString s = do
   path <- strToList s
   bracket (openFile path mode) hClose (f . (:[]) . toPort)
scmCallWithFile :: IOMode -> (Handle -> ScmValue) -> String
                -> [ScmValue] -> IO (ErrOr ScmValue)
scmCallWithFile mode toPort _ [s, ScmFunc _ f] | isString s = do
   path <- strToList s
   bracket (openFile path mode) hClose (f . (:[]) . toPort)
scmCallWithFile mode toPort _ [s, ScmFunc _ f] | isString s = do
   path <- strToList s
   bracket (openFile path mode) hClose (f . (:[]) . toPort)