我想创建一个模块,并将其加载到haskell库中。我可以使用haskell平台的工具使用ubuntu 11或Windows 7。这是我的模块:
module Pkr.Element(..) where
import Char
data Card = Card Int deriving (Eq)
seme :: Card -> Int
seme (Card x) = mod (div x 13) 4
label :: Card -> Int
label (Card x) = mod x 13
instance Ord Card where
(>) x y |ix == iy = False
|ix == 0 = True
|iy == 0 = False
| otherwise = (ix > iy)
where
ix = label x
iy = label y
instance Show Card where
show :: Card -> String
show card = strI(label card) : strS(seme card) :[]
where
strI x | (x == 0) = 'A'
| (x == 12) = 'K'
| (x == 11) = 'Q'
| (x == 10) = 'J'
| (x == 9) = 'T'
| otherwise = chr (49+x)
strS y | (y == 0) = 'h'
| (y == 1) = 'c'
| (y == 2) = 'd'
| (y == 3) = 's'
data Category = Null | HighCard | Copple | TwoCopple |
Tris | Straight | Flush | FullHouse |
Poker | StraightFlush deriving (Show, Eq, Ord)
type Cards = [Card]
data Rank = Rank Category Cards Cards deriving (Eq, Ord, Show)
ghci中的“show”也存在一些问题,因为我得到了堆栈溢出的异常。
最佳答案
您的粘贴使代码困惑了;也许看起来应该是这样:http://hpaste.org/54363(请注意底部hlint
的建议。)以下步骤是一种简单的开发方法,但我认为可以揭示大部分相关因素:
Poker.Elements
,将其另存为Elements.hs
poker
的目录以及一个名为Poker
的子目录Elements.hs
移到poker/Poker
中。现在,它的层次名称Poker.Elements
变得有意义了。您的目录结构如下所示:-- poker -- Poker -- Elements.hs
poker
现在已正确组织。从那里键入ghci Poker/Elements.hs
,然后ghci
将知道如何以更复杂的结构来处理任何其他Poker.x.y.z
模块,例如:-- poker -- Poker -- Internal -- Guts.hs (i.e.Poker.Internal.Guts)
|
-- Elements.hs (i.e. Poker.Elements)
但是我们的想法是使用
poker
工具构建并安装cabal
库。没有比这更简单的了。如果不存在,则将
cd
转换为poker
。 cabal init
。答案将显而易见。您正在制作一个与游戏有关的资料库。 poker.cabal
文件-cabal init
无法告诉您正在使用的软件包。实际上,您只使用了
Prelude
中的Data.Char
和base
,因此将Build-depends
行扩展为如下所示:Build-depends: base > 2
结果将如下所示:http://hpaste.org/54364(如果缺少任何其他依赖项,它将在下一个命令中出现。)
-- poker -- poker.cabal
|
-- Poker -- Elements.hs
cabal install
,然后键入cabal clean
。 cabal
工具具有托管配置,编译,安装和注册软件包的功能。 (默认情况下,已编译的库将存放在隐藏目录$HOME/.cabal/lib/poker-0.1
或您系统的等效目录中。)ghci
;输入import Poker.Elements
。享受。直接调用ghc
并没有什么不同-例如,如果使用ghc --make -O2 PokerCalculator.hs -o pokercalculator
生成可执行文件,ghc现在将知道如何查找Poker.Elements
,而无需进一步说明。 quickcheck
。 cabal install
重建并重新安装。这将覆盖旧的poker-0.1
安装,因为您仍在调用它。但是在这种最简单的情况下,没有针对它构建任何其他程序包,因此结果是理想的。 (如果您的其他实验库texas-holdem-0.1
(位于下一个目录中的库)可能会导入Poker.Elements
,则也可以对其进行重建,以使用有关扑克的Elements
的更高级的思想。)poker.cabal
的相关行中进行指定。如果您忘记了,当您尝试重建时,cabal install
会礼貌地提醒您执行此操作。poker
包上传到github或patch-tag或darcsden。完善后,将其上传到hackage。请注意,即使在github或patch-tag上,它也属于“hackaged”领域。如果您从Hackage上的高级软件包中导入模块,那么当人们git clone
或darcs get
您的存储库时,cabal install
将从hackage.haskell.org获得适合他们的软件包。 关于haskell - 创建并安装自己的模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8209976/