我有这个
data Something = Something Integer deriving (MyClass, Show)
class MyClass a where
hello :: MyClass a => a -> a
instance MyClass Integer where
hello i = i + 1
main = print . hello $ Something 3
Run Code Online (Sandbox Code Playgroud)
但MyClass不可导出.为什么?
例如,我有
data ShipDesign = ShipDesign {
offense :: Offense
, defense :: Defense
, maxHealth :: Integer
, repairRate :: Integer
, stealth :: Integer
, radar :: Integer
, speed :: Integer
, shipType :: String
...
}
Run Code Online (Sandbox Code Playgroud)
现在我想改变防守.已知的方法是:
changeDefense :: (Defense -> Defense) -> ShipDesign -> ShipDesign
changeDefense fDef sd@(ShipDesign o d m rr s r sp st ...) = ShipDesign o (fDef d) m rr s r sp st ...
Run Code Online (Sandbox Code Playgroud)
这不优雅.特别是在游戏中,每步只更改几个值.
我的问题是:是否有一个库,设计模式或其他方式以更优雅的方式更改单个值?
破碎代码示例:
data Foo = Foo {
bar :: (Int -> Int)
}
baz = Foo { bar i = i*3 }
Run Code Online (Sandbox Code Playgroud)
为什么这不可能?
我发现一些容器具有非常相似的功能集.例如,List,Set,Sequence,Text和Bytestrings.我想知道为什么他们不使用一个或多个常见的类型类.
Vec2正在作为数据声明,但在这种情况下我尝试使用元组废弃我的样板:
{-# LANGUAGE FlexibleInstances #-}
type Vec2 a = (a,a)
class Vector v where
foo :: v Integer
instance Vector Vec2 where
foo = (1,2)
Run Code Online (Sandbox Code Playgroud) 有没有办法在编译期间限制 ghc 的内存使用,而不影响代码质量?我在一台 2GB 的机器上,它在构建过程中真的停止了。GHC 版本 7.10.3,Ubuntu 14.04,4GB 交换。
我已经定义了类似于一个类型的类型类,其中包含我的程序所需的一系列函数.遗憾的是,它需要多种多态类型,但并非这种多参数类型类的每个函数都需要每种类型.GHC困扰我不可挽救的类型,我无法运行代码.
一个简化的例子:
{-# LANGUAGE MultiParamTypeClasses #-}
class Foo a b where
-- ...
bar :: a -> ()
baz :: Foo a b => a -> ()
baz = bar
Run Code Online (Sandbox Code Playgroud)
GHC说
Possible fix: add a type signature that fixes these type variable(s)
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做b?特别是当我想保持b多态时.只有一个实例Foo应该定义这种类型.
我想做点什么:
succ' :: (Bounded a, Eq a, Enum a) => a -> a
succ' n
| n == (maxBound :: a) = minBound :: a
| otherwise = succ n
Run Code Online (Sandbox Code Playgroud)
但这不起作用.怎么解决这个?
我正在尝试在haskell中编写一个代码,从A点到F点,在棋盘游戏中,本质上是一个Matrix,遵循最短的路径.
这是董事会:
AAAA
ACCB
ADEF
*
0 0 N
Run Code Online (Sandbox Code Playgroud)
机器人进入字母A,在底部(它是*),并且必须到达F,在板的底部是坐标,x = 0,y = 0,并指向北.F坐标是(3,0)
诀窍是,它不能跳过多个字母,它可以从A到B,B到C等,它可以遍历类型的字母(A到A,B到B等)
它只能前进并转弯(左,右)所以让我去F的路径就是
前进,前进,右,前进,前进,前进,右,跳,右,跳,前进,左,跳,左,前进,前进
一旦达到F,就完成了.
我想尝试这种方法,使用树
A
/ \
A D
/ \
/ \
A C
/ \ / \
/ \ D C
A
/ \
/ \
A
/
/
A
/ \
B A
/ \
C F
Run Code Online (Sandbox Code Playgroud)
在那之后,我只需要验证正确的路径和最短的权利?
问题是,我没有那么多使用树木的经验.
你会指出任何其他方式来获得最佳路径吗?
非常感谢你 .