簡體   English   中英

GHCI 無法加載“System.Time”的接口

[英]GHCI Failed to load interface for ‘System.Time’

我正在學習 Haskell 並嘗試從書中構建一個示例。 當我在 GHCI 中使用“:l BetterPredicate”命令加載代碼時,出現以下錯誤:

Prelude> :l BetterPredicate
[1 of 2] Compiling RecursiveContents ( RecursiveContents.hs, interpreted )

RecursiveContents.hs:12:32: warning: [-Wtabs]
    Tab character found here.
    Please use spaces instead.
[2 of 2] Compiling Main             ( BetterPredicate.hs, interpreted )

BetterPredicate.hs:3:1: error:
    Failed to load interface for ‘System.Time’
    Perhaps you meant
      System.CPUTime (from base-4.9.1.0)
      System.Cmd (from process-1.4.3.0)
      System.Mem (from base-4.9.1.0)
    Use -v to see a list of the files searched for.
Failed, modules loaded: RecursiveContents.

這是我要編譯的代碼:

import Control.Monad (filterM)
import System.Directory (Permissions (..), getModificationTime, getPermissions)
import System.Time (ClockTime(..))
import System.FilePath (takeExtension)
import Control.Exception (bracket, handle)
import System.IO (IOMode(..), hClose, hFileSize, openFile)

-- Our functions
import RecursiveContents (getRecursiveContents)

type Predicate = FilePath        -- Path to directory entry
              -> Permissions     -- permissions
              -> Maybe Integer   -- file size (Nothing if not file)
              -> ClockTime       -- last modified
              -> Bool
-- TBD
getFileSize :: FilePath -> IO (Maybe Integer)

betterFind :: Predicate -> FilePath -> IO [FilePath]
betterFind p path = getRecursiveContents >>= filterM check
    where check name = do 
              perms <- getPermissions name
              size  <- getFileSize name
              modified <- getModificationTime name 
              return (p name perms size modified)

simpleFileSize :: FilePath -> IO Integer
simpleFileSize path = do
    h <- openFile path ReadMode
    size <- hFileSize h
    hClose
    return size

saferFileSize :: FilePath -> IO (Maybe Integer)
saferFileSize path = handle (\_ -> return Nothing) $ do
    h <- openFile path ReadMode
    size <- hFileSize h
    hClose
    return (Just size)

getFileSize :: FilePath -> IO (Maybe Integer)
getFileSize path = handle (\_ -> return Nothing) $
    bracket (openFile path ReadOnly) hClose $ \h -> do
        size <- hFileSize h
        hClose
        return (Just size)


type InfoP a =  FilePath       -- path to directory entry
             -> Permissions    -- permissions
             -> Maybe Integer  -- file size (Nothing if not file)
             -> ClockTime      -- last modified
             -> a 

pathP :: InfoP FilePath
pathP path _ _ _ = path

sizeP :: InfoP Integer
sizeP _ _ (Just size) _ = size
sizeP _ _ Nothing     _ = -1

equalP :: (Eq a) => InfoP a -> a -> InfoP Bool
--equalP f k = \w x y z -> f w x y z == k
equalP f k w x y z = f w x y z == k

根據文檔: http://hackage.haskell.org/package/old-time-1.1.0.3/docs/System-Time.html需要導入它的一部分不知何故,但如果我不使用 Cabal(沒有 *.cabal 文件)或其他東西構建 package,我不知道該怎么做,我只想在 GHCI 中使用我的代碼。

只需使用cabal install全局安裝 package

$ cabal install old-time

它會給你一個警告,但如果你只是將它用於 ghci 支持,那也沒關系。

另請注意 文檔警告:

該庫已棄用,請改為查看時間Data.Time中的 Data.Time。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM