Haskell 代码无法在笔记本中显示输出

Haskell code fails to show output in Notebook

在我正在阅读的 Haskell tutorial 中,有一个示例在 GHCI (7.10.2) 中运行良好,但无法在笔记本中生成输出(Jupyter、4.0 或 Kronos-Haskell).

这个问题似乎涉及到一个函数

lockerLookup :: Int -> LockerMap -> Either String Code

在教程和 GHCI 中产生一个结果,例如

ghci> lockerLookup 101 lockers  
Right "JAH3I"

在笔记本中给出错误

No instance for (Show (Either String Code)) arising from a use of ‘print’
In a stmt of an interactive GHCi command: print it

这是笔记本中的正确行为吗?我可以做些什么来在笔记本中产生预期的输出吗?


import qualified Data.Map as Map    

data LockerState = Taken | Free deriving (Show, Eq)    
type Code = String    
type LockerMap = Map.Map Int (LockerState, Code) 

lockerLookup :: Int -> LockerMap -> Either String Code  
lockerLookup lockerNumber lockerMap =   
    case Map.lookup lockerNumber lockerMap of   
        Nothing -> Left $ "Locker number " ++ show lockerNumber ++ " doesn't exist!"  
        Just (state, code) -> if state /= Taken
            then Right code
            else Left $ "Locker " ++ show lockerNumber ++ " is already taken!"

lockers :: LockerMap  
lockers = Map.fromList   
    [(100,(Taken,"ZD39I"))  
    ,(101,(Free,"JAH3I"))  
    ,(103,(Free,"IQSA9"))  
    ,(105,(Free,"QOTSA"))  
    ,(109,(Taken,"893JJ"))  
    ,(110,(Taken,"99292"))  
    ]  

如果您使用的是 Haskell 平台,请确保目录

~/Library/Haskell/bin

存在并出现在 之前 /usr/bin 在您的 PATH 中。

这是平台安装新二进制文件的地方,因此您需要它作为您的 PATH 来访问您构建的应用程序和使用平台附带的工具的升级版本(例如 cabal、happy、alex 等)

此外,您可以使用这些说明自行安装 IHaskell:

https://github.com/gibiansky/IHaskell#install-haskell-tools