如何在 Haskell 中生成 null 类型?

How can I generate a null type in Haskell?

提问人:sSalvi 提问时间:11/10/2022 更新时间:11/10/2022 访问量:108

问:

我需要在 Haskell 中制作一个四叉树。但我以前从未使用过这种语言。据我了解,Haskell 中没有空指针。那么我怎样才能为四叉树的指针实例化一个空版本的组(如果有办法的话)?

data Group = Group {
    idf :: Int,
    name :: String,
    lat :: Int,
    long :: Int,
    nw :: Group,
    ne :: Group,
    sw :: Group,
    se :: Group
} deriving Show

main :: IO()

main = do
    let g1 = Group { idf = 0, name = "Ababa", lat = 32, long = 40, nw = ???}
    print g1

我知道也许存在。不过不知道如何在这种情况下使用它。

Haskell nullPointerException 四叉树

评论

0赞 chepner 11/10/2022
是否表示一个位置及其相邻位置,或单个位置的细分?这可能会影响我将使用的两个答案中建议的用法。GroupMaybe

答:

5赞 Fyodor Soikin 11/10/2022 #1

您使用 .它是一种类型,可以具有两种不同类型的值:要么是其他类型的值,要么是其他类型的值。MaybeNothingJust xx

data Group = Group {
    ...
    nw :: Maybe Group,
    ne :: Maybe Group,
    sw :: Maybe Group,
    se :: Maybe Group
} deriving Show

main = do
    let g1 = Group { ..., nw = Nothing, ne = Nothing, sw = Nothing, se = Nothing }
    print g1

    ...

    let g2 = Group { ... ne = Just g1, ... }
2赞 Daniel Wagner 11/10/2022 #2

我会为您的.Group

data Group = Empty | Group {
    idf :: Int,
    name :: String,
    lat :: Int,
    long :: Int,
    nw :: Group,
    ne :: Group,
    sw :: Group,
    se :: Group
    } deriving Show

通常,如果您在具有多个构造函数的类型中使用记录语法,这是一个不好的迹象,因此您可能需要了解这些陷阱。