我想知道我是否可以编写一个Haskell程序来按需检查一些小说的更新,我使用的网站就是这个.我在显示它的内容时遇到了问题(在mac capitan上).简单的代码如下:
import Network.HTTP
openURL :: String -> IO String
openURL = (>>= getResponseBody) . simpleHTTP . getRequest
display :: String -> IO ()
display = (>>= putStrLn) . openURL
Run Code Online (Sandbox Code Playgroud)
然后,当我display "http://www.piaotian.net/html/7/7430/"在ghci上运行时,会出现一些奇怪的字符; 第一行看起来像这样:
<title>×ß½øÐÞÏÉ×îÐÂÕ½Ú,×ß½øÐÞÏÉÎÞµ¯´°È«ÎÄÔĶÁ_Æ®ÌìÎÄѧ</title>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<meta name="keywords" content="×ß½øÐÞÏÉ,×ß½øÐÞÏÉ×îÐÂÕ½Ú,×ß½øÐÞÏÉÎÞµ¯´° Æ®ÌìÎÄѧ" />
<meta name="description" content="Æ®ÌìÎÄÑ§ÍøÌṩ×ß½øÐÞÏÉ×îÐÂÕ½ÚÃâ·ÑÔĶÁ£¬Ç뽫×ß½øÐÞÏÉÕ½ÚĿ¼¼ÓÈëÊղط½±ãÏ´ÎÔĶÁ,Æ®ÌìÎÄѧС˵ÔĶÁÍø¾¡Á¦ÔÚµÚһʱ¼ä¸üÐÂС˵×ß½øÐÞÏÉ£¬Èç·¢ÏÖδ¼°Ê±¸üУ¬ÇëÁªÏµÎÒÃÇ¡£" />
<meta name="copyright" content="×ß½øÐÞÏɰæÈ¨ÊôÓÚ×÷ÕßÎáµÀ³¤²»¹Â" />
<meta name="author" content="ÎáµÀ³¤²»¹Â" />
<link rel="stylesheet" href="/scripts/read/list.css" type="text/css" media="all" />
<script type="text/javascript">
Run Code Online (Sandbox Code Playgroud)
我也尝试下载如下文件:
import Network.HTTP
openURL :: String -> IO String
openURL = (>>= …Run Code Online (Sandbox Code Playgroud) 在这个答案中,人们发现声明实现Read数据类型的实例并不是很难Tree,实际的解析已经完成.
但是,我很难理解这样的函数如何read工作:AFAIK,我应该实现一个readsPrec函数而不是,read这readsPrec应该执行只包含一个字符的字符串的读取.它是否正确?
如果是这种情况,那么应该如何实现解析完成时的Read实例?我们可以逐字逐句解析,还是有必要这样做? TreeParsecT
我没想到的read是在Haskell困难的特点,但现在我觉得很困惑和混乱,我在寻找丢失Hoogle的所有这些陌生的东西readP_to_S,readS等等.
任何帮助或参考将不胜感激.
说我有如下文字.
那个男人在走路,男人正在吃饭.
我该如何使用替换将其转换为以下内容?
男人1走路,男人2正在吃饭.
我知道我可以:%s/\<man\>//gn用来计算单词的出现次数,man我知道/\%(\(pattern\).\{-}\)\{n - 1}\zs\1可以找到第n次出现的模式.但是我如何标记第n次出现?
任何帮助都是真诚的感谢; 提前致谢.
我正在尝试使用Monads编写一个Haskell"数字猜测"游戏程序,但我被困住了:
我尝试了简单的状态monad:
data SM a = SMN (S -> (a, S))
instance Monad SM where
SMN c1 >>= fc2 = SMN (\s0 -> let (r, s1) = c1 s0 in
let SMN c2 = fc2 r in
c2 s1)
Run Code Online (Sandbox Code Playgroud)
我需要在元组(a,S)的"IO端"执行IO任务,也就是说,我尝试做类似的事情:
SMN c1 >>= fc2 = SMN (\s0 -> let (r, s1) = c1 s0 in
let SMN c2 = fc2 r in
let (r1, s2) = c2 s1 in
let r2 = r1 >>= (\_ -> r) in
(r2, s2)) …Run Code Online (Sandbox Code Playgroud) 从这个答案中,我们学习了如何\x y z -> f x (g y z)在Haskell中以无意义的方式实现该函数,其中f和g是函数.我的问题是
如何
\x -> f (g x) (h x)在Haskell中以无点的方式编写函数?以下是定义的fgh函数f (g x) (h x).
我目前想到的想法如下.
uncurry f (mapTuple ($ x) (g, h))
Run Code Online (Sandbox Code Playgroud)
但是几次尝试表明这是错误的; 甚至部分map ($ x) [g, h]可疑:如果g和h有不同的范围?
此外,可读性在这里不是一个问题.
任何帮助都是真诚的感谢.
haskell ×4
content-type ×1
html ×1
html-parsing ×1
io ×1
monads ×1
pointfree ×1
regex ×1
state-monad ×1
substitution ×1
vim ×1