Haskell 来自哈斯克尔

Haskell 来自哈斯克尔,haskell,Haskell,我在将可能列表转换为字符串列表时遇到问题 我的清单是这样的:[没有,只有3,只有9,没有,没有] 我想用点('.')替换所有的Nothing,用“Int”替换所有的Just Int 到目前为止,我的解决方案不起作用 [if c == Nothing then c = '.' else show (fromJust c) | c <- [Nothing, Just 3.... etc] ] [如果c==Nothing,那么c='.'其他显示(仅从c)| c使用数据中的maybe。mayb

我在将可能列表转换为字符串列表时遇到问题

我的清单是这样的:[没有,只有3,只有9,没有,没有]

我想用点('.')替换所有的Nothing,用“Int”替换所有的Just Int

到目前为止,我的解决方案不起作用

 [if c == Nothing then c = '.' else show (fromJust c) | c <- [Nothing, Just 3.... etc] ]

[如果c==Nothing,那么c='.'其他显示(仅从c)| c使用数据中的
maybe
。maybe

import Data.Maybe

test = [Nothing, Just 3, Just 9, Nothing, Nothing]

f :: Show a => [Maybe a] -> [String]
f = map (maybe "." show)

您的问题是,您试图使用列表理解来修改列表中的元素,方法是执行
c='.
。这是Haskell,因此您从不修改任何内容!(除了
STRef
IORef
,但我们不必修改)


您可以执行以下操作:

[if c == Nothing then '.' else show (fromJust c) | c <- [Nothing, Just 3.... etc] ]
你应该去做,或者你可以去做

map (maybe "." show) [...whatever...]

无论哪一种,你都会喜欢。(嗯,后者更清楚。)

在命名上吹毛求疵,但这在Haskell中是一件重要的事情:类型的种类。
可能有种类
*->*
,所以永远不可能有一个“可能的
列表”,对于一些
a
,只有
可能的列表。你的例子
[Nothing,Just 3,Just 9,Nothing,Nothing]
将是
Num a=>[可能是a]
,或者可能是
[Int]
。但这与您的问题没有什么关系。此外,如果您愿意,您可以使用catMaybes:[可能是a]>[a]根据数据。也许。这只会给你留下整数,没有其他。这不是你在追求什么,但可能是其他人发现你的问题在追求什么。
[if c == Nothing then '.' else show (fromJust c) | c <- [Nothing, Just 3.... etc] ]
[maybe "." show c | c <- [...whatever...] ]
map (maybe "." show) [...whatever...]