小编Mad*_*ote的帖子

在Haskell中的列表上映射Functor

有点困惑.fmap听起来它可以在map所有的列表中Maybe,但如果我使用eg,我无法让它工作fApplyFunctor = (+1) <$> [Just 1, Just 2].

看起来完美无缺的是:map ((+1) <$>) [Just 1, Just 2, Just 3].从某种意义上来说,这似乎有点矫枉过正,我记得fmap已经可以做到这一点......

haskell functor map-function

7
推荐指数
1
解决办法
146
查看次数

GHC Haskell 架构 x86_64 的重复符号

如果我遵循 Real World Haskell (JSON 示例)中的示例,并且首先忽略模块中括号的错误,那么当我编译时,我仍然会遇到以下错误

ld:架构 x86_64 的 38 个重复符号 clang:错误:链接器命令失败,退出代码 1(使用 -v 查看调用)gcc' failed in phase链接器'。(退出代码:1)

有人知道这是什么以及如何解决吗?有人在 Real World Haskell tut 中也遇到过这个问题吗?

haskell ghc

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

具有类型构造函数的Typeclass定义的Haskell实例

data CouldBe a = Is a | Lost deriving (Show, Ord)

instance Eq (CouldBe m) where
  Is x == Is y = x == y 
  Lost == Lost = True 
  _ == _ = False 
Run Code Online (Sandbox Code Playgroud)

给出错误No instance for (Eq m) arising from a use of ‘==’

instance (Eq m) => Eq (CouldBe m) where
  Is x == Is y = x == y 
  Lost == Lost = True 
  _ == _ = False 
Run Code Online (Sandbox Code Playgroud)

工作正常(至少我开始理解错误),但是为什么我需要该约束?我正在尝试学习,所以“为什么”对我来说非常重要。

haskell constraints typeclass

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

使实例适用

仍然没有百分之一百的人知道如何制作更复杂类型的实例。拥有这个:

data CouldBe a = Is a | Lost deriving (Show, Ord) 
Run Code Online (Sandbox Code Playgroud)

做的一个实例Functor,使用Maybe为例:

instance Functor CouldBe where 
  fmap f (Is x) = Is (f x) 
  fmap f Lost   = Lost 
Run Code Online (Sandbox Code Playgroud)

对于这样的事情:

tupleCouldBe :: CouldBe a -> CouldBe b -> CouldBe (a,b)
tupleCouldBe x y = (,) <$> x <*> y
Run Code Online (Sandbox Code Playgroud)

CouldBe需要成为的实例Applicative,但是您将如何处理呢?当然,我可以查找并复制它,但是我想学习其背后的过程,最后以instance声明CouldBe结尾。

haskell typeclass applicative

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

Haskell为另一个Either数据类型定义Functor实例

通过Typeclassopedia进行一些使用类型类的路由。想要替代Either的实例Functor,但即使检查的定义EitherFunctor使我陷入麻烦。有这个,但是不会编译。

data Alt a b = Success a | Failure b deriving (Show, Eq, Ord) 

instance Functor (Alt a) where 
  fmap _ (Failure a) = Failure a
  fmap f (Success x) = Success (f x)  

    • Couldn't match expected type ‘a1’ with actual type ‘a’
      ‘a1’ is a rigid type variable bound by
        the type signature for:
          fmap :: forall a1 b. (a1 -> b) -> Alt a a1 -> Alt a …
Run Code Online (Sandbox Code Playgroud)

haskell compiler-errors functor type-mismatch either

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

Haskell获取列表的第一个Char并附加到该列表的末尾

鉴于:

mangle :: String -> String
Run Code Online (Sandbox Code Playgroud)

我想做的事情如下:

mangle xs = head xs -- works if you change typesig to [a] -> a
Run Code Online (Sandbox Code Playgroud)

但:

mangle xs = tail xs ++ head xs -- won't work at all!
Run Code Online (Sandbox Code Playgroud)

想要在该列表的末尾追加列表的第一个字符,删除第一个字符.

haskell tail

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

Haskell MonadWriter类型签名

关于MonadWriter的Noob问题:

monadWrite :: Writer String Int
monadWrite = writer (3003, "log 1\n") 
Run Code Online (Sandbox Code Playgroud)

为什么它String首先出现在typeig中Int,然后3003是第二个,而显然是Int一会儿"log 1\n"是一个String。我知道微不足道,但我想了解。

monads haskell writer type-signature

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

foldr和foldr1 Haskell

我试图深入研究,考虑到它对我来说似乎是一个非常强大的资产.但是,你能帮我解决这个问题:

foldr  (/) 2 [1,2,3] -- (1/(2/(3/2))), result 0,75 {where 2 is base)
foldr1 (/)   [2,2,3] -- (1/(2/(3/2))), result 3.00 {where 2 is base)
Run Code Online (Sandbox Code Playgroud)

我认为我正在认真监督褶皱之间的本质区别.谢谢

haskell fold

3
推荐指数
2
解决办法
1101
查看次数

Haskell 写文件

初学者。有一个名为 HHtml 的模块输出这个:

  setDoc = "<!DOCTYPE = <html><head>"
  setTitle = "<title>" ++ htmlTitle generator ++ "</title>"
  setHeader = "<header>" ++ htmlHeader generator ++ "</header>"
  setMeta = "<meta>" ++ htmlMeta generator ++ "</meta></head>"
  setBody = "<body>" ++ htmlBody generator ++ "</body>"
  setFooter = "<footer>" ++ htmlFooter generator ++ "</footer>"
  setEOF = "</html>"

  setHTML = [setDoc, setTitle, setHeader, setMeta, setBody, setFooter, setEOF]
Run Code Online (Sandbox Code Playgroud)

主文件:

import HHtml
import System.IO

main = do
  let content = mapM_ putStrLn setHTML
  writeFile "index.html" content
Run Code Online (Sandbox Code Playgroud)

然而,现在我看着它,我不断地得到这个Couldn't match …

io haskell types

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

Haskell独立可执行文件,无需使用“ stack exec”

如何从stack生成的框架(stack new myprog simple)创建可执行文件?myprog.cabal然后显示myprog为可以使用执行的可执行文件stack exec myprog。但是:使用./myprog将不起作用。除非我打电话给我ghc --make src/Main.hs。显然,这可以正常工作并且很好地嵌入了模块,但是现在可执行文件称为Main。有没有一种方法可以将其stack编译myprog为完整的可执行文件,并且可以在设置了环境路径的情况下从任何地方调用?

haskell ghc haskell-stack

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