小编Vek*_*weg的帖子

如何写一个可派的类?

我有这个

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不可导出.为什么?

haskell

13
推荐指数
2
解决办法
2317
查看次数

如何以优雅的方式"改变"大对象中的单个值?

例如,我有

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)

这不优雅.特别是在游戏中,每步只更改几个值.

我的问题是:是否有一个库,设计模式或其他方式以更优雅的方式更改单个值?

haskell

11
推荐指数
1
解决办法
449
查看次数

为什么我不能在记录更新表示法中使用函数参数?

破碎代码示例:

data Foo = Foo {
    bar :: (Int -> Int)
  }

baz = Foo { bar i = i*3 }
Run Code Online (Sandbox Code Playgroud)

为什么这不可能?

haskell

10
推荐指数
2
解决办法
191
查看次数

为什么容器类型没有类型类?

我发现一些容器具有非常相似的功能集.例如,List,Set,Sequence,Text和Bytestrings.我想知道为什么他们不使用一个或多个常见的类型类.

haskell

5
推荐指数
2
解决办法
356
查看次数

为什么多态类型同义词不像实例中的多态数据声明那样工作?

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)

haskell

5
推荐指数
1
解决办法
164
查看次数

限制 GHC 的内存使用

有没有办法在编译期间限制 ghc 的内存使用,而不影响代码质量?我在一台 2GB 的机器上,它在构建过程中真的停止了。GHC 版本 7.10.3,Ubuntu 14.04,4GB 交换。

haskell ghc

5
推荐指数
1
解决办法
595
查看次数

如何处理多参数类型类的函数,谁不需要每种类型的类型类?

我已经定义了类似于一个类型的类型类,其中包含我的程序所需的一系列函数.遗憾的是,它需要多种多态类型,但并非这种多参数类型类的每个函数都需要每种类型.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应该定义这种类型.

haskell

3
推荐指数
1
解决办法
297
查看次数

Haskell:泛型函数中的bound-value

我想做点什么:

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

1
推荐指数
2
解决办法
197
查看次数

Haskell - 使用树计算最短路径

我正在尝试在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)

在那之后,我只需要验证正确的路径和最短的权利?

问题是,我没有那么多使用树木的经验.

你会指出任何其他方式来获得最佳路径吗?

非常感谢你 .

haskell graph path-finding

1
推荐指数
1
解决办法
1022
查看次数

标签 统计

haskell ×9

ghc ×1

graph ×1

path-finding ×1