标签: purescript

如何在 PureScript 中发表评论?

我想知道如何在 PureScript 代码中进行注释。

在 Python 中,等价的是:

# Here is a comment
Run Code Online (Sandbox Code Playgroud)

或者 JavaScript

// Another comment
Run Code Online (Sandbox Code Playgroud)

PureScript 中的等效项是什么?

purescript

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

如何使用 PureScript 进行调试?

问题

以下是一个最小的、人为的示例:

read :: FilePath -> Aff String
read f = do
  log ("File: " <> f) -- (1)
  readTextFile UTF8 f -- (2)
Run Code Online (Sandbox Code Playgroud)

我想在发生(1)潜在错误之前进行一些调试日志记录(2)。到目前为止,在 Spago REPL 中执行以下代码适用于成功案例:

$ spago repl
> launchAff_ $ read "test/data/tree/root.txt"
File: test/data/tree/root.txt
unit
Run Code Online (Sandbox Code Playgroud)

(2)问题:如果- file is directory here -出现错误,(1)则似乎根本没有执行:

$ spago repl
> launchAff_ $ read "test/data/tree"
~/purescript-book/exercises/chapter9/.psci_modules/node_modules/Effect.Aff/foreign.js:532
                throw util.fromLeft(step);
                ^

[Error: EISDIR: illegal operation on a directory, read] {
  errno: -21,
  code: 'EISDIR',
  syscall: 'read'
} …
Run Code Online (Sandbox Code Playgroud)

debugging logging functional-programming purescript visual-studio-code

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

为什么类型类覆盖条件在 Haskell 中失败,但在 PureScript 中却失败

我有两个我认为等效的类型类和实例定义的实现。PureScript 版本构建时没有错误,但 Haskell 版本失败并出现错误Un-determined variables: e, f

我可以在 Haskell 中完成这个工作吗?

哈斯克尔:

class Foo a b c | a b -> c where
newtype Bar a b = Bar (a, b)
instance (Foo a c e, Foo b d f) => Foo (Bar a b) (Bar c d) (Bar e f) where
Run Code Online (Sandbox Code Playgroud)

纯脚本:

class Foo a b c | a b -> c
newtype Bar a b = Bar (Tuple a b)
instance (Foo a c e, Foo b …
Run Code Online (Sandbox Code Playgroud)

haskell purescript

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

纯脚本中的 SProxy?

PureScript中Sproxy有什么用?

在追求中,它被写成

data SProxy (sym :: Symbol)
--| A value-level proxy for a type-level symbol.
Run Code Online (Sandbox Code Playgroud)

purescipt 中的 Symbol 是什么意思?

functional-programming purescript

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

如何在purescript-halogen中组合有效的事件处理程序和自定义EventUpdates?

在我自定义的Halogen/Purescript项目中,我遵循AJAX示例中的模式,在这里我将我的行为分解为纯粹Input的和有效Request的.

我想更改我的事件处理程序以使用该preventDefault行为,但不明白这会对UI函数的类型产生什么影响.

我通过以下方式更改事件处理程序,对AJAX示例进行了相同的更改:

之前:

H.button [ A.classes [B.btn, B.btnPrimary]
         , A.disabled busy
         , A.onclick (\_ -> pure (handler code))
         ] [ H.text "Compile" ]
Run Code Online (Sandbox Code Playgroud)

后:

H.a [ A.classes [B.btn, B.btnPrimary]
    , A.href "#compile"
    , A.disabled busy
    , A.onclick (\_ -> E.preventDefault $> pure (handler code))
    ] [ H.text "Compile" ]
Run Code Online (Sandbox Code Playgroud)

(完全差异在这里可用)

我最终得到这种类型的错误:

Cannot unify type
    Example.Ajax.Input
    with type
        Halogen.HTML.Events.Monad.Event Halogen.HalogenEffects<(http ::
        Example.Ajax.HTTP | u32519)> Example.Ajax.Input
Run Code Online (Sandbox Code Playgroud)

此时,我有点迷失是否需要调整UI函数的类型签名或者我preventDefault以错误的方式应用修饰符.

purescript halogen

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

在Purescript; - >和=>之间有什么区别?

在使用PureScript教程时,代码示例开始使用"=>"而不引入它.结果我不明白何时使用'=>'而不是' - >'.

例如,这使用'=>':

instance showArray :: (Show a) => Show (Array a) where
    show array = "[" <> map show array <> "]"
Run Code Online (Sandbox Code Playgroud)

这里使用' - >':

greet :: forall r. { name :: String | r} -> String
greet namedThing = "Hello, " ++ namedThing.name
Run Code Online (Sandbox Code Playgroud)

purescript

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

(Purescript)如何在代数数据类型上模式匹配"空类型"

我正在使用PureScript中的以下代数数据类型...

data Extended a = Infinite | Finite a

v1 = Finite 11
v2 = Infinite
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何模式匹配"无限"情况,因为它似乎v2有类型forall t140. Extended t140.我假设t140是编译器自动填充的某种占位符.v1的类型是Extended Int.因此,如果我设置一个Eq实例来比较Extended的值,那么Infinite案例就不匹配......

instance extendedEq :: (Eq a) => Eq (Extended a) where
  eq (Finite a) (Finite b) = eq a b
  eq Infinite Infinite = true
  eq Infinite _ = false
  eq _ Infinite = false
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试运行时,v2 == v2我得到错误...

No type class instance was found for Prelude.Eq (Extended _0)
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为我想它正试图为t140找到一个Eq实例.

所以我的问题是,如何在无限类型上进行模式匹配?

equality pattern-matching algebraic-data-types purescript

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

Purescript铝热剂和腹板

我正在尝试使用purescript-thermite来构建一个使用websockets的应用程序.这个想法是应用程序使用websockets连接到某个服务器并实时更新HTML页面.但是,我找不到如何将其连接到thermite工作流程的方法.

我有一个specrender和组成的performAction.在render访问的dispatch功能.但是,我需要在渲染元素之前启动websockets(我可能会把它放到例如main),但是在消息到达时,我需要理想地dispatch从外部向组件发送事件.最好的方法是什么?

purescript

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

Purescript教程:未知值logShow

我花了大约一个小时的时间学习PureScript,并且我通过PureScript在他们的网站上推荐的示例教程中遇到了一些障碍.(具体来说,我在第2.10节).我设法安装了所有东西,我试图使用logShow他们在教程中描述的方法.我得到的Unknown value logShow,当我运行此代码错误:

module Main where

import Prelude
import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Console (CONSOLE, log)
import Math (sqrt)

main :: forall e. Eff (console :: CONSOLE | e) Unit
main = logShow (diagonal 3.0 4.0)

diagonal w h = sqrt(w * w + h * h)
Run Code Online (Sandbox Code Playgroud)

我假设这logShow是一个用于记录整数的log方法,因为实际方法只接受字符串.这个方法定义在哪里?我没有输入什么东西吗?我的安装不正确吗?或者教程是否正在跳过某些内容?

提前致谢!

purescript

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

从另一个模块导入新类型

我最近正在学习PureScript,并做了一个小应用程序,可以在屏幕上绘制一个立方体。一切都很好,我newtypeMain模块顶部定义了一些,如下所示:

newtype Vec2 = Vec2
    {
        x :: Number
    ,   y :: Number
    }

newtype Vec3 = Vec3
    {
        x :: Number
    ,   y :: Number
    ,   z :: Number
    }
Run Code Online (Sandbox Code Playgroud)

我还获得了一些进行转换等功能的功能,perspectiveDivide我想移至另一个模块Transforms以更好地组织。因此,我将这些类型移到了“转换”模块中,并导出了它们。

module Transforms (Vec2, Vec3, perspectiveDivide) where
Run Code Online (Sandbox Code Playgroud)

并且上述类型遵循此。

现在,我尝试使用选择性导入功能将它们导入到主模块中,但是没有用。

import Transforms (Vec2, Vec3, perspectiveDivide)
Run Code Online (Sandbox Code Playgroud)

但是在尝试使用projectToScreen仍在主模块中的函数时,仍然给我一个错误。错误是这样的:

在src / Main.purs模块Main中的第30行第10列-第30行第18列中

Unknown data constructor Vec3
Run Code Online (Sandbox Code Playgroud)

请参阅 https://github.com/purescript/documentation/blob/master/errors/UnknownName.md 了解更多信息,或提供与此错误相关的内容。

我既是函数式编程的新手,也是PureScript的新手。这个错误是什么意思?

newtype purescript

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