小编zer*_*ing的帖子

为什么评估会停止?

我有以下代码:

foldr const 0 ([1] ++ undefined)
Run Code Online (Sandbox Code Playgroud)

我得到了结果1.

我知道,这foldr是正确的关联.写出上面的例子:

const 1 (const undefined 0)
Run Code Online (Sandbox Code Playgroud)

为什么括号中的表达式不会被评估为第一个?

因为函数应用程序的优先级高于括号?

haskell

0
推荐指数
1
解决办法
121
查看次数

这种类型的价值是多少?

我有以下类型声明:

data MyType = MyVal Int deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

如您所见,它只有一个带参数的数据类型构造函数.

在书中,它说:

因为MyVal有一个Int参数,所以MyType类型的值必须包含一个 - 只有一个 - Int值

为什么IntMyType类型的值或它是什么意思?

haskell

0
推荐指数
1
解决办法
83
查看次数

它可以引用`Data.Monoid.<>'

我有以下声明:

data Two a b = Two a b deriving (Eq, Show)

instance (Semigroup a, Semigroup b) => Semigroup (Two a b) where
  (Two a b) <> (Two c d) = Two (a <> c) (b <> d)
Run Code Online (Sandbox Code Playgroud)

并在前奏中尝试过:

*Main First Lib MonoidLaws Semi>   (Two a b) <> (Two c d) = Two (a <> c) (b <> d)

<interactive>:10:3: error:
    * Occurs check: cannot construct the infinite type: t1 ~ Two t1 t1
      Expected type: t1 -> t -> …
Run Code Online (Sandbox Code Playgroud)

haskell

0
推荐指数
1
解决办法
108
查看次数

它如何成为特定类型?

我有以下代码片段:

Prelude Data.Monoid> :t 1 <> (2 :: Sum Integer)
1 <> (2 :: Sum Integer) :: Sum Integer
Run Code Online (Sandbox Code Playgroud)

怎么1变成Sum Integer打字?

更新

我玩了一下mappend功能并发现:

Prelude Data.Monoid> x = mappend 43
Run Code Online (Sandbox Code Playgroud)

为什么mappend会接受这个号码4343是一个Num类型,它没有monoid实例.

haskell

0
推荐指数
1
解决办法
78
查看次数

首先执行哪个应用程序?

我有以下Traversable实例:

  instance Traversable (Three' a) where
    traverse f (Three' x y z) = Three' x <$> f y <*> f z  
Run Code Online (Sandbox Code Playgroud)

中缀运算符<$><*>具有相同的优先级,即4.

*ExercisesTraversable> :i <$>
(<$>) :: Functor f => (a -> b) -> f a -> f b
    -- Defined in ‘Data.Functor’
infixl 4 <$>


*ExercisesTraversable> :i <*>
class Functor f => Applicative (f :: * -> *) where
  ...
  (<*>) :: f (a -> b) -> f a -> f b
  ...
    -- Defined …
Run Code Online (Sandbox Code Playgroud)

haskell

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

如何撰写两个函数?

我有两个功能,我正在努力compose:

  private def convert(value: String)
  : Path = decode[Path](value) match {


  private def verify(parsed: Path)
  : Path = parsed.os match {
Run Code Online (Sandbox Code Playgroud)

我尝试过如下:

verify compose convert _
Run Code Online (Sandbox Code Playgroud)

编译器抱怨:

[error] Unapplied methods are only converted to functions when a function type is expected.
[error] You can make this conversion explicit by writing `verify _` or `verify(_)` instead of `verify`.
[error]     verify compose convert _
[error]     ^
[error] one error found
Run Code Online (Sandbox Code Playgroud)

我想完成以下事项:

  def process(value: String)
  : Path =
    verify(convert(value))
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

scala

0
推荐指数
1
解决办法
285
查看次数

如何成为Id类型?

我有以下代码:

import cats._
import cats.Functor

object StudyIt {

  def main(args: Array[String]): Unit = {
    val one: Int = 1
    val a = Functor[Id].map(one)(_ + 1)
    println(a)
  }

}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,map期望的类型Id[Int],但我只是过去Intmap,为什么它是可能的吗?

scala scala-cats

0
推荐指数
1
解决办法
152
查看次数

Bool - > Maybe()是同构的吗?

我想弄明白,如果Bool -> Maybe ()是同构的话.

可能的组合是:

True -> Just ()
True -> Nothing
False -> Just ()
False -> Nothing
Run Code Online (Sandbox Code Playgroud)

我会说,它是同构的,并且对于每种组合,它都存在单独的函数来反转它.

如何证明上述态射是同构的?

haskell

0
推荐指数
2
解决办法
131
查看次数

OverloadedStrings语言扩展如何工作?

我正在尝试从页面https://ocharles.org.uk/posts/2014-12-17-overloaded-strings.html了解语言扩展名OverloadedStrings .

启用OverloadedStrings后,将String成为一个类型Data.String.IsString a => a:

Prelude Data.String> :t fromString "Foo"
fromString "Foo" :: IsString a => a 
Run Code Online (Sandbox Code Playgroud)

在描述中,作者提到了以下内容:

通过启用此扩展,字符串文字现在是对fromString函数的调用,该函数属于IsString类型类.

这是什么string literals are now a call to the fromString function

并且作者还提到:

这种多态性非常强大,它允许我们在Haskell源代码中编写嵌入式域特定语言,而不必为其他正常值引入新的构造.

什么without having to introduce new constructs for otherwise normal values意思?

haskell

0
推荐指数
1
解决办法
132
查看次数

如何使用 flatMapConcat?

我正在尝试使用flatMapConcat如下:

Source.empty
      .flatMapConcat {
        Source.fromFuture(Future("hello"))
      }
      .runWith(Sink.foreach(println))
      .onComplete {
        case Success(_) =>
          println()
        case Failure(e) =>
          println(s"Thrown ${e.getMessage}")
      }
Run Code Online (Sandbox Code Playgroud)

编译器抱怨:

Error:(31, 26) type mismatch;
 found   : akka.stream.scaladsl.Source[String,akka.NotUsed]
 required: ? => akka.stream.Graph[akka.stream.SourceShape[?],?]
        Source.fromFuture(Future("hello")) 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

scala akka-stream

0
推荐指数
1
解决办法
1094
查看次数

标签 统计

haskell ×7

scala ×3

akka-stream ×1

scala-cats ×1