所以我有一个8mb的文件,每个文件有6个整数,由一个空格隔开.
我目前解析这个的方法是:
tuplify6 :: [a] -> (a, a, a, a, a, a)
tuplify6 [l, m, n, o, p, q] = (l, m, n, o, p, q)
toInts :: String -> (Int, Int, Int, Int, Int, Int)
toInts line =
tuplify6 $ map read stringNumbers
where stringNumbers = split " " line
Run Code Online (Sandbox Code Playgroud)
并映射到Ints over
liftM lines . readFile
Run Code Online (Sandbox Code Playgroud)
这将返回一个元组列表.但是,当我运行它时,加载文件并解析它需要将近25秒.我有什么办法可以加快速度吗?该文件只是纯文本.
有没有人对如何获得插入位置有任何想法TextInput?我试过onSelectionChange并创建一个事件发射器,DocumentSelectionState但似乎都没有工作(他们不会触发任何东西,无论我选择什么).
我想做的是从Reader monad中制作一个Applicative Functor,它做了这样的事情:
data MyData = Int Int
get2Sum :: Reader [Int] Int
get2Sum = do
myData <- ask
let fst2 = take 2 myData
case length fst2 of
2 -> return $ sum fst2
_ -> return 0
myDataFromApplicative = MyData <$> get2Sum <*> get2Sum
main = print $ runReader myDataFromApplicative [1,2]
Run Code Online (Sandbox Code Playgroud)
但是,如果运行类似的东西
runReader myDataFromApplicative [1]
Run Code Online (Sandbox Code Playgroud)
而不是给我 MyData 0 0
我希望它能给我 Error
我正在玩创建自己的Reader Monad来实现这一目标,但无法弄明白.
我想象的是这样的事情(显然这只是一个大纲
data SuccessReader r a = Interm {runSuccessReader :: r -> SuccessReader a} | Success …Run Code Online (Sandbox Code Playgroud) 我看到一些涉及monad实例的奇怪行为.我正在编写一个快照应用程序,在我的一个处理程序中,除非我创建一个函数,否则它将无法编译.
withManager直接在我的处理程序中调用如下:
authenticateLanding :: Handler App App ()
authenticateLanding = do
req <- getRequest
oir <- liftIO $ withManager $ OpenId.authenticateClaimed (convertParams req)
writeBS (fromString $ show oir)
Run Code Online (Sandbox Code Playgroud)
导致此编译时错误
openIDTrial.hs:120:25:
No instance for (Control.Monad.Trans.Control.MonadBaseControl
IO m1)
arising from a use of `withManager'
Possible fix:
add an instance declaration for
(Control.Monad.Trans.Control.MonadBaseControl IO m1)
In the expression: withManager
In the second argument of `($)', namely
`withManager $ OpenId.authenticateClaimed (convertParams req)'
In a stmt of a 'do' block:
oir <- liftIO
$ …Run Code Online (Sandbox Code Playgroud) 我安装了PIL,但每当我尝试通过Django Admin为我的模型将.png文件上传到图像字段时,我收到此错误:
"上传有效图片.您上传的文件不是图片或图片已损坏."
其他图像类型工作正常.我尝试了几种不同的PNG文件.
我已经尝试在安装pypng,libpng-dev等之后重建PIL.并且我在ubuntu服务器上.
所以我的haskell程序看起来像这样:
main = do
secondData <- loadSecondBars "output.data"
putStrLn $ "Generated Second Data " ++ (show $ length secondData)
let tenMinBars = secondData `seq` generateBars (barSize featureSet) secondData
putStrLn $ "Generated Ten Minute Bars " ++ (show $ length tenMinBars)
let combinedData = seq tenMinBars sortBars (tenMinBars ++ secondData)
putStrLn $ "Generated Combined" ++ (show $ length combinedData)
let completedOrderManager = evalState (runBar combinedData) startState
putStrLn "Ran Algo"
Run Code Online (Sandbox Code Playgroud)
这样做需要大约8秒钟来加载我的第二个数据,然后大约需要3秒来完成其余的功能.
但是,如果我删除节目长度数据,它将闪烁
"Generated Second Data"
"Generated Ten Minute Bars"
"Generated Combined"
"Ran …Run Code Online (Sandbox Code Playgroud) 目前我有这样的事情:
data MyData = SomeData | MoreData | EvenMore
data DataLists = DataLists [MyData] [MyData]
Run Code Online (Sandbox Code Playgroud)
这让我显然可以这样做:
myDataList :: DataLists
myDataList = DataLists [SomeData, MoreData] [EvenMore, SomeData]
Run Code Online (Sandbox Code Playgroud)
但我想做一些像这样的事情:
-- Static Module File:
class MyClass b where
evaluate :: b -> Int
data SomeData = SomeData
data MoreData = MoreData
data EvenMore = EvenMore
instance MyClass SomeData where
evaluate _ = 2
instance MyClass MoreData where
evaluate _ = 3
instance MyClass EvenMore where
evaluate _ = 4
data DataList = DataList …Run Code Online (Sandbox Code Playgroud) 所以我正在建立一个State Monad并遇到一些懒惰的问题,这让我很难调试.
我的州Monad通过列入一个值列表来操作,将它们一个接一个地推送到州的一部分,然后我分析每个州之后的状态值,以产生该州的另一部分.
我想出了这个简单的例子来说明为什么它很难调试.
module Main where
import Control.Monad.State
import Debug.Trace
runSim :: [Int] -> State String String
runSim [] = return =<< get
runSim (cur:xs) = do
lst <- get
let val = (show $ 2*cur)
put $ trace ((show $ length lst) ++ " " ++ (show cur)) ((val) ++ "," ++ lst)
runSim xs
main :: IO ()
main = print $ evalState (runSim [1..10]) ""
Run Code Online (Sandbox Code Playgroud)
这个输出是:
0 1
2 2
4 3
6 4
8 5 …Run Code Online (Sandbox Code Playgroud) 我想做的是这样的:
采取任意多态元组:
x = (((1, ""), Nothing), ('', 6))
Run Code Online (Sandbox Code Playgroud)
并使用类似的东西重新组织(不一定是相同的顺序,但结构相同:
(Int, (Char, (Maybe Int, (String, (Int, ()))))
Run Code Online (Sandbox Code Playgroud)
我真的不知道这个模式的名称,所以我无法尽我所能使用谷歌.
最近我有一个字符串列表,需要独立遍历每个字符串并执行一些IO功能.
所以我基本上就是这样:
goOverList :: [String] -> IO ()
goOverList (x:[]) = do
putStrLn x
goOverList (x:xs) = do
goOverList [x]
goOverList xs
main = do
let myList = ["first", "second", "third"]
goOverList myList
Run Code Online (Sandbox Code Playgroud)
我IO有点复杂,但这是它的要点(需要有一个功能超过列表,并IO根据列表成员做)我希望有人可以告诉我如何更好地做到这一点.
我试图从一组具有manytomanyfield的对象中计算不同的值
例如
对象文章有许多标记对象的字段
一篇文章有标签"tag1""tag2"
另一篇文章有标签"tag2""tag3"
我想找出一些可以返回以下内容的东西:
"tag1":1"tag2":2"tag3":1
我以为我可以用articles.objects.all().values('tags')或者其他东西做些什么但是我空了.
我的服务器配置如下(这是全新安装的ubuntu 10.10)
nginx + gunicorn + django + supervisord来运行它
当我尝试访问我的网站时,我收到502错误.这将显示在错误日志中:
2011/06/03 10:40:59 [error] 15066#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: [retracted], server: [retracted], request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:29000/", host: "[retracted]"
Run Code Online (Sandbox Code Playgroud)
这是我的nginx.conf http://pastebin.com/t0V2yFxr
这是我的supervisord.conf http://pastebin.com/pqVqRLSk
和我的gunicorn.conf
bind = "127.0.0.1:29000"
logfile = "/sites/[retracted]/logs/gunicorn.log"
workers = 3
Run Code Online (Sandbox Code Playgroud)
当我运行sudo supervisordctl状态
什么也没有回报.所以这让我怀疑它没有正常运行.但是,没有supervisord.log文件(在/ var/log /或/ code/[]/logs /中)或gunicorn.log显示错误.
所以我根本无法调试.关于如何获得这种羚牛护理的任何建议?
haskell ×8
django ×3
gunicorn ×1
javascript ×1
monads ×1
nginx ×1
python ×1
react-native ×1
supervisord ×1
virtualenv ×1