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:
在我正在阅读的 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: