众所周知,应用函子在组合下是封闭的,但是monad不是.但是,我一直难以找到一个具体的反例,表明monad并不总是构成.
这个答案给出[String -> a]了一个非monad的例子.在玩了一下之后,我直觉地相信它,但是这个答案只是说"加入无法实现"而没有给出任何理由.我想要更正式的东西.当然有很多类型的函数[String -> [String -> a]] -> [String -> a]; 必须表明任何这样的功能必然不符合monad法则.
任何例子(附带证据)都可以; 我不一定特别想要证明上述例子.
我正在尝试使用haxr 3000.8.5 使用metaWeblog API(特别是newMediaObject方法)将图像上传到WordPress博客.
我已经成功地为小图像工作,成功上传了PNG和JPG格式的20x20图标.但是,当我尝试中等大小的图像(例如,300x300)时,我得到一个ErrorClosed例外,大概来自HTTP包(我做了一些源头潜水,发现haxr最终调用Network.HTTP.simpleHTTP).
任何人都可以解释为什么呼叫simpleHTTP可能失败的原因ErrorClosed?我们也欢迎您提供尝试和潜在解决方案的建议.
以下是成功上传和不成功上传的完整tcpdump输出的链接.
(已消毒的)代码也显示如下,以防任何用途.
import Network.XmlRpc.Client (remote)
import Network.XmlRpc.Internals (Value(..), toValue)
import Data.Char (toLower)
import System.FilePath (takeFileName, takeExtension)
import qualified Data.ByteString.Char8 as B
import Data.Functor ((<$>))
uploadMediaObject :: FilePath -> IO Value
uploadMediaObject file = do
media <- mkMediaObject file
remote "http://someblog.wordpress.com/xmlrpc.php" "metaWeblog.newMediaObject"
"default" "username" "password" media
-- Create the required struct representing the …Run Code Online (Sandbox Code Playgroud)