小编Mic*_*ard的帖子

如何应对Haskell名称空间?

我正在写一个data记录来编组一个JIRA JSON对象.问题是,多个对象具有相同的名称/值对标签.例如 :

(从curl返回并格式化)

{"expand":"schema,names"
,"startAt":0
,"maxResults":2
,"total":74
,"issues":[
           {"expand":"editmeta,renderedFields,transitions,changelog,operations"
           ,"id":"183614"
           ,"self":"https://10.64.16.44/rest/api/latest/issue/183614"
           ,"key":"BNAP-339"
           ,"fields":{"versions":[
                                  {"self":"https://10.64.16.44/rest/api/2/version/28240"  
                                  ,"id":"28240"
                                  ,"name":"2012-12-07"
                                  ,"archived":false
                                  ,"released":false
                                  }
                                 ]
                     ,"status":{"self":"https://10.64.16.44/rest/api/2/status/1"
                               ,"description":"The issue is open and ready for the assignee to start work on it."
                               ,"iconUrl":"https://10.64.16.44/images/icons/status_open.gif"
                               ,"name":"Open"
                               ,"id":"1"
                               }
                     ,"description":"Do Re Mi Fa"
                     ,"resolution":null
                     }
           }
          ]
Run Code Online (Sandbox Code Playgroud)

当我构造有问题的相应Haskell data记录时,我得到:

data Issue = Issue {expand :: String
                   ,id :: String
                   ,self :: String
                   ,key :: String
                   ,fields :: Fields
                   } deriving Generic


data Version = …
Run Code Online (Sandbox Code Playgroud)

json haskell jira aeson

6
推荐指数
1
解决办法
258
查看次数

突破的变化在哪里?

我写了一个CRUD应用程序来与JIRA接口.我最终升级了我的haskell环境,因为cabal-dev并没有解决所有问题.结果,我有一些破损,随着我尝试使用任何与JIRA接口的代码时出现此错误.

Spike: HandshakeFailed (Error_Misc "user error (unexpected type received. expecting
handshake and got: Alert [(AlertLevel_Warning,UnrecognizedName)])")
Run Code Online (Sandbox Code Playgroud)

经过一番谷歌搜索后,我认为这与使用tls的tls或http-conduit有关.

我目前正在使用tls-1.1.2,http-conduit-1.8.7.1 之前我正在使用 tls-0.9.11并且http-conduit >= 1.5 && < 1.7(不确定到底哪个旧安装已经消失了.

这是我相信休息时间正在发生的地方

manSettings :: ManagerSettings
manSettings = def { managerCheckCerts = \ _ _ _-> return CertificateUsageAccept }
Run Code Online (Sandbox Code Playgroud)

这就是它过去的样子

manSettings :: ManagerSettings
manSettings = def { managerCheckCerts = \ _ _ -> return CertificateUsageAccept }
Run Code Online (Sandbox Code Playgroud)

这是使用它的代码

initialRequest :: forall (m :: * -> *). URI -> IO (Request m,Manager)
initialRequest uri …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

6
推荐指数
1
解决办法
167
查看次数

Miranda To Haskell - 改进版本是什么?

我从工作了代码文件.我的翻译更加冗长,这让我烦恼.它发生在我身上我错过了一些显而易见的东西,它会像原来的米兰达一样简洁.

这是米兰达:

fix :: qtree(*) -> qtree(*)
fix(Leaf(x)) = Leaf(x)
fix(Internal(nw, ne, sw, se)) =
   merge(Internal(fix(nw), fix(ne), fix(sw), fix(se)))
   where
      merge(Internal (Leaf(x), Leaf(x), Leaf(x), Leaf(x))) = Leaf(x)
      merge(other) = other
Run Code Online (Sandbox Code Playgroud)

请注意LHS merge.它捕获了所有四个叶子具有相同值的情况.不能直接音译到Haskell,因为我会得到多个定义的抱怨x.这是我的版本:

fix :: (Eq a) => QTree a -> QTree a
fix (Leaf a) = Leaf a
fix (Internal nw ne sw se) =
   merge (Internal (fix nw) (fix ne) (fix sw) (fix se))
      where
   merge internal@(Internal (Leaf w) (Leaf x) (Leaf y) (Leaf …
Run Code Online (Sandbox Code Playgroud)

haskell

6
推荐指数
2
解决办法
336
查看次数

Reactive Banana 1.0.0 - 为什么这个旧代码破坏了?

这是以前的代码(我希望适当截断)

makeNetworkDescription :: forall t . Frameworks t => Parameters -> Moment t ()
makeNetworkDescription params = do
  eInput <- fromAddHandler (input params)
  eTick <- fromAddHandler (tick params)
  ..
let
    bResourceMap :: Behavior t ResourceMap
    bResourceMap = accumB initRmap $
      adjustMarket <$>
      bMarketRolls <@
      eTick
Run Code Online (Sandbox Code Playgroud)

但现在类型已经改变了.
我们有:
makeNetworkDescription :: Parameters -> MomentIO ()accumB :: MonadMoment m => a -> Event (a -> a) -> m (Behavior a)

说我改变的定义bResourceMap

bResourceMap :: Behavior ResourceMap
bResourceMap = accumB initRmap …
Run Code Online (Sandbox Code Playgroud)

haskell frp reactive-banana

6
推荐指数
1
解决办法
104
查看次数

对这种lambda的使用感到困惑

所以我认为Lambdas在Learn You a Haskell中得到了证明:

(filter (\xs -> length xs > 15) (map chain [1..100])) 
Run Code Online (Sandbox Code Playgroud)

xs的输入是从(map chain [1..100])) 容易阅读的生成的列表.

所以这里我感到困惑,看一些真实世界代码(tm).

这是管道的功能

fmap f (ResourceT m) = ResourceT $ \r -> fmap f (m r)
Run Code Online (Sandbox Code Playgroud)

r的输入来自哪里?

haskell

5
推荐指数
2
解决办法
169
查看次数

在这种模式匹配中发生了什么?

在Data.List中,我看到了这个不熟悉的模式匹配:

{-# NOINLINE [1] unsafeTake #-}
unsafeTake :: Int -> [a] -> [a] 
unsafeTake !_  []     = []
unsafeTake 1   (x: _) = [x]
unsafeTake m   (x:xs) = x : unsafeTake (m - 1) xs
Run Code Online (Sandbox Code Playgroud)

我的理解是!删除thunk.好的,但_被忽略了.有些东西我不理解.澄清表示赞赏.

haskell pattern-matching

5
推荐指数
1
解决办法
90
查看次数

Haskell-如何将两个Monadic Maybe函数合并为一个函数

假设我有这两个数据记录X和Y以及以下两个函数:

f1 :: IO (Maybe [X])
f2 :: X -> IO (Maybe Y)
Run Code Online (Sandbox Code Playgroud)

我需要先调用f1,然后对返回列表(存储在中IO (Maybe))的每个元素调用f2,这将导致类似的结果IO (Maybe [IO (Maybe Y)])。我怎样才能使他们变得有意义,例如

result :: Maybe (IO [Y])
Run Code Online (Sandbox Code Playgroud)

要么

result :: IO (Maybe [Y])
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助:-)

haskell monad-transformers

5
推荐指数
2
解决办法
145
查看次数

功能性反应香蕉型混淆

Heinrich Apfelmus慷慨地介绍了这个问题.我曾考虑过使用它accumB作为解决方案,但认为会出现类型错误.无论如何,在尝试了他的建议之后,我确实收到了类型错误.

let bGameState :: Behavior t GameState
    bGameState = accumB initialGS $ updateGS <$ eInput

yields the error

 Couldn't match expected type `GameState'
             with actual type `PlayerCommand'
 Expected type: GameState -> GameState
   Actual type: PlayerCommand -> GameState -> GameState
 In the first argument of `(<$)', namely `updateGS'
 In the second argument of `($)', namely `updateGS <$ eInput'
Run Code Online (Sandbox Code Playgroud)

所以我研究了(<$),并且局部应用了.看看他建议的例子.我做的越多,我就越认为上面的代码应该起作用了,我感到困惑的是为什么它没有.

这是我认为应该发生的事情:

因为(<$)是类型(<$) :: a -> f b -> f …

haskell types frp reactive-banana

4
推荐指数
1
解决办法
147
查看次数

Haskell中有一个空字符吗?

这是我的代码:

reverseEncode :: Char -> String -> Int -> Char
reverseEncode _ [] _ = ?
reverseEncode c (x:xs) offset
 | alphaPos c == (alphaPos x + offset) `mod` 26 = chr (((alphaPos x + offset) + 65) `mod` 26)
 | otherwise = reverseEncode c xs offset
Run Code Online (Sandbox Code Playgroud)

这只是虚拟Enigma Machine中使用的一种小方法。在编写没有第二行的函数并对其进行测试之后,我得到了以下异常:

Non-exhaustive patterns in function reverseEncode
Run Code Online (Sandbox Code Playgroud)

然后我意识到我没有告诉函数何时停止递归。这就是第二行代码的诞生方式。显然,我可以在每个步骤中检查字符串的长度,但是看起来并不优雅。

在Haskell中,有什么我可以代替的吗??如果没有,我有什么可以定义的吗?还是可以通过更好的方式完成此操作?

编辑:我实际上已经通过检查字符串的长度尝试了版本,并且我得到了相同的异常。那么我该如何运作呢?

haskell functional-programming

4
推荐指数
1
解决办法
76
查看次数

将函数的输出作为Haskell中另一个函数的输入传递

如何将函数的输出作为另一个函数的输入传递.

例如,我有这两个功能

collatz :: (Integral a) => a -> [a]
collatz 1 = [1]  
collatz n  
    |even n = n:collatz (n `div` 2)  
    |odd n = n:collatz (n*3 + 1) 
Run Code Online (Sandbox Code Playgroud)

而我的另一个功能

length' [] = 0
length' (x:xs) = 1 + length' xs
Run Code Online (Sandbox Code Playgroud)

我想计算列表的长度,这是从我的collat​​z函数输出的.

最后我想完全计算这个

numLongChains :: Int  
numLongChains = length (filter isLong (map collatz [1..100]))  
    where isLong xs = length xs > 15  
Run Code Online (Sandbox Code Playgroud)

但一步一步.

haskell input output

3
推荐指数
1
解决办法
269
查看次数