小编Ana*_*Ana的帖子

Haskell QuickCheck2使用ByteString?

RWH书籍说要获得ByteString支持,我需要添加:

instance Arbitrary B.ByteString where
    arbitrary   = fmap B.pack arbitrary
    coarbitrary = coarbitrary . B.unpack
Run Code Online (Sandbox Code Playgroud)

但是我用QuickCheck 2.4.1.1的GHC 7.2告诉我:

`coarbitrary' is not a (visible) method of class `Arbitrary'
Run Code Online (Sandbox Code Playgroud)

有什么指针吗?

haskell quickcheck

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

Haskell"依赖"字段的记录?

我已经定义了以下记录:

data Option = Option {
    a    :: Maybe String,
    b    :: Either String Int
} deriving (Show)
Run Code Online (Sandbox Code Playgroud)

反正我是否强制执行a Nothing,b必须是a Left,当a是Just,b必须是a Right?也许用幻影类型或其他东西?或者我必须将整个东西包裹在一个Either中并制作它Either String (String, Int)吗?

haskell record

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

Haskell根据字段名字符串动态设置记录字段?

说我有以下记录:

data Rec = Rec {
   field1 :: Int,
   field2 :: Int
}
Run Code Online (Sandbox Code Playgroud)

我该如何编写这个函数:

changeField :: Rec -> String -> Int -> Rec
changeField rec fieldName value 
Run Code Online (Sandbox Code Playgroud)

这样我可以将字符串"field1"或"field2"传入fieldName参数并让它更新相关字段?我理解Data.Data并且Data.Typeable在这里使用的是什么,但我无法想出这两个包.


我见过的库的一个例子就是cmdArgs.以下是关于如何使用此库的博客文章的摘录:

{-# LANGUAGE DeriveDataTypeable #-}
import System.Console.CmdArgs

data Guess = Guess {min :: Int, max :: Int, limit :: Maybe Int} deriving (Data,Typeable,Show)

main = do
    x <- cmdArgs $ Guess 1 100 Nothing
    print x
Run Code Online (Sandbox Code Playgroud)

现在我们有一个简单的命令行解析器.一些示例交互是:

$ guess --min=10
NumberGuess {min = 10, …
Run Code Online (Sandbox Code Playgroud)

haskell record

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

在Haskell中实现高效的滑动窗口算法

我在Haskell中需要一个高效的滑动窗口函数,所以我写了以下内容:

windows n xz@(x:xs)
  | length v < n = []
  | otherwise = v : windows n xs
  where
    v = take n xz
Run Code Online (Sandbox Code Playgroud)

我的问题是我认为复杂度是O(n*m),其中m是列表的长度,n是窗口大小.你倒计时列表一次take,另一次length,你在基本上mn次列表中.看起来它可能比这更有效,但我对如何使其更加线性感到茫然.任何接受者?

haskell time-complexity sliding-window

10
推荐指数
4
解决办法
2564
查看次数

为什么Haskell指向函数的自由版本导致模糊类型错误?

事实证明,在GHC 7.10中,这编译很好:

mysum xs = foldr (+) 0 xs
Run Code Online (Sandbox Code Playgroud)

但是这个:

mysum    = foldr (+) 0
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

No instance for (Foldable t0) arising from a use of ‘foldr’
The type variable ‘t0’ is ambiguous
Relevant bindings include
  mysum :: t0 Integer -> Integer (bound at src/Main.hs:37:1)
Note: there are several potential instances:
  instance Foldable (Either a) -- Defined in ‘Data.Foldable’
  instance Foldable Data.Functor.Identity.Identity
    -- Defined in ‘Data.Functor.Identity’
  instance Foldable Data.Proxy.Proxy -- Defined in ‘Data.Foldable’
  ...plus five others
In the expression: foldr …
Run Code Online (Sandbox Code Playgroud)

haskell types function monomorphism-restriction

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

Haskell数据结构对于交换元素是否有效?

我正在寻找一个Haskell数据结构,它存储一个有序的元素列表,并且在交换列表中任意位置的元素对时节省时间.[a]显然,这不是.这不是Vector因为交换创建了新的向量.哪种数据结构有效?

haskell data-structures

10
推荐指数
3
解决办法
380
查看次数

Python中的Swift Optionals(或Haskell's Maybe)?

在斯威夫特我能做到var?.prop.这导致nil,如果varnil,否则将导致价值prop的财产var.

同样地,我可以做var >>= prop在Haskell,这给了我NonevarIS None,否则它给我应用的价值prop里面的值var(裹Just).

Python中有相应的东西吗?

python haskell optional maybe swift

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

模板Haskell与记录字段名称作为变量?

我有以下代码实现monad.我正在尝试使用它来简化以后使用更复杂逻辑的字段设置.

data Rec = Rec {
    alpha :: Int,
    beta  :: Double,
} deriving (Show)
defaultRec = Rec 0 0 0

data Record r = Record { runRecord :: Rec -> (Rec, r) }
instance Monad Record where
    return r = Record $ \s -> (s, r)
    a >>= b  = Record $ \s -> let (q, r) = runRecord a s in runRecord (b r) q

createRecord f = fst $ runRecord f defaultRec

changeAlpha x  = Record $ …
Run Code Online (Sandbox Code Playgroud)

haskell template-haskell

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

自定义UIStoryboardSegue Push和Pop匹配动画

我有一个以下代码UIStoryBoardSegue来做一个卷曲推送segue.

 (void) perform {

    UIViewController *src = (UIViewController *) self.sourceViewController;
    UIViewController *dst = (UIViewController *) self.destinationViewController;

    [UIView transitionWithView:src.navigationController.view duration:1
                       options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionTransitionCurlUp
                    animations:^{
                        [src.navigationController pushViewController:dst animated:NO];
                    }
                    completion:NULL];

}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当我点击应用程序上的"后退"按钮时,它会向后滑动而不是向下滑动.因为这是推送,我需要弹出当前的视图控制器而不是添加另一个segue.

我如何做一个"卷曲的流行音乐"?

ios uistoryboardsegue

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

如何让Emacs按长度排序?

我希望能够在Emacs中突出显示一个区域,然后按行长度对区域进行排序.

我发现的最接近的代码是我认为按长度排序的代码:

 (sort-subr t #'forward-line #'end-of-line nil nil 
             (lambda (l1 l2) 
               (apply #'< (mapcar (lambda (range) (- (cdr range) (car range))) 
                                  (list l1 l2))))) 
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将其变成一个交互式功能,让我通过突出显示一个区域来使用它.有人可以帮忙吗?

sorting emacs elisp

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