PureScript - 使用 fromMaybe 从 Number 获取整数

PureScript - Integer from Number using fromMaybe

考虑以下 PureScript 代码,它试图将数字转换为整数。

module Main where

import Prelude (discard, Unit)
import Prelude (($))
import Data.Int ( toStringAs, fromNumber, decimal )
import Data.Maybe ( fromMaybe )

myNumber :: Number
myNumber = 4.762

myInteger :: Int
myInteger = fromMaybe (0 $ (fromNumber myNumber))

但是此代码会产生以下错误,

 Could not match type
       
    Int
       
  with type
  
    t0 -> t1

不确定如何在这里正确使用 fromMaybe,因为这个用例似乎还没有记录。

所以问题是, 将数字转换为整数的正确语法是什么?

不是 100% 清楚您要做什么,但看起来您有一套额外的括号。

myInteger = fromMaybe (0 $ (fromNumber myNumber))
                      ^                         ^
                      |                         |
                       these two are detrimental

这两个括号里面的表达式是:

0 $ (...)

如果您查看 the definition or the docs 中的 $ 运算符,您会发现它的左参数应该是一个函数。

     right argument
       |
       v
  0 $ (...)
  ^
  |
 left argument

但 PureScript 看到 0Int 类型)而不是函数。

因此它正确地抱怨:无法将类型 Int 与类型(函数类型)

匹配

猜测你的实际意思是 (1) 尝试将 Number 转换为具有 fromNumberInt , (2) 如果失败,用 fromMaybe.

代替零

如果您查看 definition of fromMaybe,您会发现它有两个参数:第一个参数是默认值,第二个参数是 Maybe 值。所以你需要做的就是用这两个参数调用 fromMaybe:

                          second argument
                                 |
                         ------------------
                        /                  \
                        v                   v
myInteger = fromMaybe 0 (fromNumber myNumber)
                      ^
                      |
                  first argument

我真的不明白你怎么会有写作的想法0 $ (...),所以我无法解决这个特别的误解,抱歉。