【问题标题】:Purescript Tutorial: unknown value logShowPurescript 教程:未知值 logShow
【发布时间】:2016-08-29 20:48:38
【问题描述】:

我学习 PureScript 大约需要一个小时,但在阅读 PureScript 在其网站上推荐的 PureScript by Example Tutorial 时遇到了障碍。 (具体来说,我在第 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)

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

提前致谢!

【问题讨论】:

    标签: purescript


    【解决方案1】:

    你快到了。

    注意这一行:

    import Control.Monad.Eff.Console (CONSOLE, log)
    

    Control.Monad.Eff.Console 同时提供loglogShow。要解决您的特定问题,您只需将这些括号之间的log 替换为logShow( 之后的名字,CONSOLE,是效果的名称)。

    以防万一——两者的区别可以通过类型看出:

    log     :: forall eff.        String -> Eff (console :: CONSOLE | eff) Unit
    logShow :: forall a eff. Show a => a -> Eff (console :: CONSOLE | eff) Unit
    

    暂时忽略影响...

    log ::                    String -> Unit
    logShow :: forall a. Show a => a -> Unit
    

    log 仅打印字符串,而 logShow 打印任何具有 Show 实例的内容。

    实际上,是的;这意味着logShow 就是(log <<< show)。如果我们去看看源代码...We can find it's indeed the case.

    【讨论】:

      猜你喜欢
      • 2017-07-15
      • 2022-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多