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)
有什么指针吗?
我已经定义了以下记录:
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)吗?
说我有以下记录:
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中需要一个高效的滑动窗口函数,所以我写了以下内容:
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次列表中.看起来它可能比这更有效,但我对如何使其更加线性感到茫然.任何接受者?
事实证明,在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数据结构,它存储一个有序的元素列表,并且在交换列表中任意位置的元素对时节省时间.[a]显然,这不是.这不是Vector因为交换创建了新的向量.哪种数据结构有效?
在斯威夫特我能做到var?.prop.这导致nil,如果var是nil,否则将导致价值prop的财产var.
同样地,我可以做var >>= prop在Haskell,这给了我None是varIS None,否则它给我应用的价值prop里面的值var(裹Just).
Python中有相应的东西吗?
我有以下代码实现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) 我有一个以下代码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.
我如何做一个"卷曲的流行音乐"?
我希望能够在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)
但我不知道如何将其变成一个交互式功能,让我通过突出显示一个区域来使用它.有人可以帮忙吗?