小编Aug*_*son的帖子

实例在Haskell中意味着什么?

在Java中,我们可以从类中创建对象/实例.在Haskell中,我们可以从类型类创建实例,例如:

data ShirtSize = S | M | L      -- Here ShirtSize is a enum data-type

class MyEq a where
  (==) :: a -> a -> Bool
instance MyEq ShirtSize where   -- Here ShirtSize is an instance of the MyEq type-class
  S == S = True
  M == M = True
  L == L = True
  _ == _ = False
Run Code Online (Sandbox Code Playgroud)

这不是同一个问题:在haskell Obs中混淆函数作为functor的实例:我不是在问fmap是如何工作的,我在问Haskell中的实例解法是什么意思.

我的问题是: 实例在haskell中意味着什么?在java中我们可以从类中创建实例,但在haskell中,似乎实例是类型(如ShirtSize),您可以在其上应用类型类函数(例如,来自MyEq 的(==)函数).我对吗?还有什么是Haskell中的实例与Java中的实例/对象相比?

haskell functional-programming typeclass

13
推荐指数
3
解决办法
5245
查看次数

Haskell中的main函数总是以main = do开头吗?

在java中我们总是写:

public static void main(String[] args){...}
Run Code Online (Sandbox Code Playgroud)

当我们想要开始编写程序时.

我的问题是,对于Haskell,IE是否相同:我是否总是可以确定声明:main = do,当我想在Haskell中为程序编写代码时?

例如:

main = do  
    putStrLn "What's your name?"  
    name <- getLine 
    putStrLn ("Hello " ++ name) 
Run Code Online (Sandbox Code Playgroud)

该程序将询问用户"你叫什么名字?" 然后,用户输入将存储在name-variable中,并且在程序终止之前将显示"Hello"++名称.

haskell program-entry-point do-notation

5
推荐指数
1
解决办法
1422
查看次数

什么在Haskell中派生/做什么?

导出堆栈溢出的定义是:

"在Haskell中,派生实例是一个与数据或newtype声明一起自动生成的实例声明.派生实例声明的主体是从关联类型的定义中语法派生的."

说实话,我真的不明白.

以下代码取自:链接

data BaseballPlayer = Pitcher 
                        | Catcher
                        | Infielder
                        | Outfielder
                        deriving Show

barryBonds :: BaseballPlayer -> Bool
barryBonds Outfielder = True

barryInOf = print(barryBonds Outfielder)
Run Code Online (Sandbox Code Playgroud)

我的问题是,派生语句在这个特定情况下做了什么,以及派生语句一般做了什么?

这个问题并不重复: 如何在haskell OBS 中推导出工作:我不是在询问它的源代码是如何工作的,我在问它是做什么的.

haskell functional-programming deriving

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

main函数不会在haskell中使用任何参数

嗨,我想在haskell中定义一个main函数,类似于java中的main函数

main :: String -> IO()
main args = do
            putStrLn args
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行程序时,这会给我一个错误.

haskell functional-programming function

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

如何更改 Vue 路由器链接的宽度?

我有以下代码(IN VUE.JS):

<template>
    <router-link
        id="router-link"
     >
    </router-link>
</template>
Run Code Online (Sandbox Code Playgroud)
<script>
    ?
</script>
Run Code Online (Sandbox Code Playgroud)
<style scoped>
    #router-link{
        border: 2px solid black;
        width: 100px;
    }
</style>
Run Code Online (Sandbox Code Playgroud)

问题:
即使我将宽度设置为 100px,router-link也不会改变它的宽度大小。

有人可以帮助我理解为什么这不起作用以及是否有可能的解决方案?

vue.js vue-router vuejs2

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

尝试在Haskell中定义自定义绑定运算符时出错

所以我最近一直在研究monad,我对Haskell编程语言很新.

这是我的代码:

import Data.List
import System.IO

f :: Int -> (Int, [Char])
f x = (x, ['a'])

g :: Int -> (Int, [Char])
g y = (y, ['b'])

(>>=) :: (Int -> (Int, [Char])) -> (Int -> (Int, [Char])) -> Int -> (Int, [Char])
(>>=) f1 f2 a =  f1 (fst (f2 a))

h :: Int -> (Int, [Char])
h x = (>>=) g f x
Run Code Online (Sandbox Code Playgroud)

GHCI编译器显示:错误:

Ambiguous occurrence `>>='
It could refer to either `Prelude.>>='
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我是否以正确的方式使用monad?

monads haskell scope functional-programming module

2
推荐指数
1
解决办法
140
查看次数

锁实现死锁

我有两个线程,一个 id 0,另一个 id 1。根据这些信息,我尝试构造一个锁,但似乎死锁,但我不明白为什么,有人可以帮助我吗?

我试图构建一个发生这种情况的场景,但这真的很难

  private int turn = 0;
  private boolean [] flag = new boolean [2];
   
  public void lock(int tid) {
    int other;
 
    other = (tid == 0) ? 1 : 0;

    flag[tid] = true;
    while (flag[other] == true) {
      if (turn == other) {
        flag[tid] = false;
        while (turn == other){}
        flag[tid] = true;
      }
    }
  }
 
  public void unlock(int tid) {
    //turn = 1-t;
    turn = (tid == 0) ? 1 : 0;
    flag[tid] = …
Run Code Online (Sandbox Code Playgroud)

java deadlock

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

haskell中的所有参数都是从左到右阅读的?

例如:

f :: (b -> c) -> (a -> b) -> c
        g           h
Run Code Online (Sandbox Code Playgroud)

函数f将两个函数(我们称之为g和h)作为输入参数,并返回一个c类型的值

第一个参数:(a -> b) 第二个参数:(b -> c) 返回:类型的值c

为了使此函数定义为真,类型必须排列,如下所示:(a -> b) -> (b -> c)<=等效于=>a -> c

并且唯一的方法是将第二个参数用作第一个参数的输入,例如g(h(x)),其中x是a类型,对于Haskell中的所有函数都是如此?换句话说,正确的参数总是被定义为其左参数的输入?这是Haskell中所有组合函数的一般情况吗?如果是这样,我应该始终从右到左而不是从左到右阅读和解释函数参数?

OBS:这个问题与以下问题不同: 为什么点在haskell中从右到左构成 因为我的问题对于所有函数都更通用,我也已经知道由其他函数组成的函数被称为函数组合,而我了解点功能等

haskell functional-programming

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

如何在Haskell中检查文本文件是否为空?

如何在Haskell中检查文本文件是否为空?

我已经尝试过了:

main = do
       contents <- getContents
       if null contents then do
       putStrLn "File was empty"
       return()
       else do
       putStrLn "File was not empty"
       return
Run Code Online (Sandbox Code Playgroud)

haskell

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