小编zer*_*ing的帖子

逐步推导类型

我有一个真正的问题,派生类型,根本不了解,如何派生类型.

我定义了一个f具有以下实现的函数:

f x y z = x * y * z
Run Code Online (Sandbox Code Playgroud)

函数的类型签名f是:

f :: Num c => c -> c -> c -> c
Run Code Online (Sandbox Code Playgroud)

很简单吧?

现在,适用fmapid功能,寻找的类型签名.

首先,让我们申请map f:

a -> b "The signature of the first argument of map
~    ~
c -> c -> c -> c "The signature of the f function
Run Code Online (Sandbox Code Playgroud)

你可以看到上面,我如何分离和获得类型相等,即a ~ cb ~ c -> c -> c. …

haskell

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

如何传递消息以隔离和处理错误

我正在尝试使用dart隔离库来提高我的应用程序性能.

看下面的代码:

import 'dart:isolate';
import 'package:dbcrypt/dbcrypt.dart';

main() {

  var pwConPort = new ReceivePort();
  pwConPort.listen((data) {
      print(data);
      pwConPort.close();
  }, onError: (err) {
      print(err);
  });

  Isolate.spawn(generatePasswordConcurrency, pwConPort.sendPort);

}

void generatePasswordConcurrency(SendPort sendPort) {
    sendPort.send(_generateHashPassword('Passsowr1222!'));

}

String _generateHashPassword(String password) {
    var regex = new RegExp(r'^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).*$');
    if (!regex.hasMatch(password)) {
        throw new StateError('Errors');
    }
    return new DBCrypt().hashpw(password, new DBCrypt().gensalt());
}
Run Code Online (Sandbox Code Playgroud)

一切正常但我只能传递一个静态密码,或者更好地说,我不知道,如何动态传递一些东西.在这里你可以看到,密码是硬编码的,但我想传递一个变量.

void generatePasswordConcurrency(SendPort sendPort) {
    sendPort.send(_generateHashPassword('Passsowr1222!'));

}
Run Code Online (Sandbox Code Playgroud)

如果方法_generateHashPassword将抛出错误,我该如何处理此错误?我尝试从ReceivePort捕获listen方法的错误

  pwConPort.listen((data) {
      print(data);
      pwConPort.close();
  }, onError: (err) {
      print(err);
  });
Run Code Online (Sandbox Code Playgroud)

但仍然有未处理的异常消息.

Observatory listening on http://127.0.0.1:51433
in ShutdownIsolate: Unhandled …
Run Code Online (Sandbox Code Playgroud)

dart dart-isolates

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

这是尾递归吗?

我有以下代码片段:

def flatten([h|t]), do: [h] ++ flatten(t)
Run Code Online (Sandbox Code Playgroud)

我在fp世界中很新,想知道这是否是尾递归?

elixir

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

为何定义教会的数字

我想明白,为什么教会定义数字如下:

0 = ? f . ? x . x
1 = ? f . ? x . f x
2 = ? f . ? x . f f x
3 = ? f . ? x . f f f x
4 = ? f . ? x . f f f f x
Run Code Online (Sandbox Code Playgroud)

背后的逻辑是什么?

为什么0表示如下:

0 = ? f . ? x . x
Run Code Online (Sandbox Code Playgroud)

lambda-calculus

4
推荐指数
2
解决办法
413
查看次数

如何证明可能的功能数量?

查看函数声明,例如:

myFoo :: Bool -> Bool
Run Code Online (Sandbox Code Playgroud)

我可以说,该函数myFoo有四种可能的唯一实现,因为函数类型是指数运算符,这里是上面案例的证明2^2 = 4:

myFoo1 :: Bool -> Bool
myFoo1 True = False 
myFoo1 True = True


myFoo2 :: Bool -> Bool
myFoo2 False = False 
myFoo2 False = True
Run Code Online (Sandbox Code Playgroud)

我如何进行以下数据声明:

data Quad =
  One
  | Two
  | Three
  | Four
  deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

和以下功能:

funcQuad :: Quad -> Quad
Run Code Online (Sandbox Code Playgroud)

可能的实现是256(4^4).我无法想象它,有很多实现.

如何在不写出来的情况下进行证明?

haskell

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

Flip数据类型的Functor类型变量

我有以下类型定义:

newtype Flip f a b = 
  Flip (f b a) deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

Flip数据构造函数是否有一个或三个参数?

Consinder实施后:

data K a b = K a

newtype Flip f a b = 
  Flip (f b a) deriving (Eq, Show)

instance Functor (Flip K a) where
  fmap f (Flip (K b)) = Flip (K (f b))  
Run Code Online (Sandbox Code Playgroud)

是什么类型的(Flip K a)

haskell arguments functor newtype

4
推荐指数
2
解决办法
265
查看次数

了解产品和副产品图

我正在尝试了解ProductCoproduct对应于以下图片:

产品: 在此处输入图片说明

副产品:

在此处输入图片说明

据我了解,ProductHaskell中的类型例如:

data Pair = P Int Double
Run Code Online (Sandbox Code Playgroud)

Sum类型是:

data Pair = I Int | D Double 
Run Code Online (Sandbox Code Playgroud)

如何理解SumProduct类型有关的图像?

图片来自http://blog.higher-order.com/blog/2014/03/19/monoid-morphisms-products-coproducts/

haskell scala tuples either category-theory

4
推荐指数
2
解决办法
136
查看次数

如何停止 Actor 中的 Source.tick?

我有一个 Actor,每 2 秒产生一个NotUsed. 也许它没有任何意义,但仅用于测试目的。

import akka.NotUsed
import akka.actor.{Actor, ActorLogging, Props}
import akka.stream.{ActorMaterializer, KillSwitches}
import akka.stream.scaladsl.{Keep, Sink, Source}
import com.sweetsoft.FsmSystem.{Add, StartTicker, StopTicker}

import scala.concurrent.duration._

object AddActor {

  def props: Props = Props(new AddActor)

}

final class AddActor extends Actor with ActorLogging {

  implicit val materilizer = ActorMaterializer()

  private val consumer: NotUsed => Unit = _ =>
    context.parent ! Add

  private val runnable = Source.tick(2.second, 2.second, NotUsed)
    .named("Ticker")
    .toMat(Sink.foreach(consumer))(Keep.both)

  override def receive: Receive = {
    case StartTicker =>

      runnable.run() …
Run Code Online (Sandbox Code Playgroud)

scala akka akka-stream

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

无法找到参数编码器的隐式值:io.circe.Encoder[com.sweetsoft.SapHealth]

我有以下代码,但无法编译:

import java.time.Instant

import io.circe.{Decoder, Encoder}
import io.circe.generic.auto._
import io.circe.syntax._

trait SapHealth {}

case class SapHealthRejected(reason: String) extends SapHealth

case class SapHealthAccepted(sapId: String, requestedAt: Long) extends SapHealth


object SapHealth {

  private val build: SapHealth = SapHealthAccepted(SapmockActor.system.name, Instant.now().getEpochSecond)

  val create: String = build.asJson.noSpaces

  implicit val encodeFieldType: Encoder[SapHealthAccepted] =
    Encoder.forProduct2("sap-id", "requested_at")(SapHealthAccepted.unapply(_).get)

  implicit val decodeFieldType: Decoder[SapHealthAccepted] =
    Decoder.forProduct2("sap-id", "requested_at")(SapHealthAccepted.apply)

}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨:

could not find implicit value for parameter encoder: io.circe.Encoder[com.sweetsoft.SapHealth]
[error]   val create: String = build.asJson.noSpaces
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

scala circe

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

如何获得所有测试的清单?

sbt键入内容testOnlytab按键后,我将获得所有可用的测试:

sbt:plugger> testOnly 
--                                       com.sweetsoft.detector.DetectorSpec      com.sweetsoft.sender.SenderMessageSpec  
Run Code Online (Sandbox Code Playgroud)

是否有命令获取所有可用的测试,而不是tab按键?

scala sbt

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