我想从冻结集中获取一个元素(当然,不修改它,因为frozensets是不可变的).到目前为止我找到的最佳解决方案是:
s = frozenset(['a'])
iter(s).next()
Run Code Online (Sandbox Code Playgroud)
按预期返回:
'a'
Run Code Online (Sandbox Code Playgroud)
换句话说,有没有任何方法可以从冻结集中"弹出"一个元素而不实际弹出它?
(很抱歉有很长的上下文描述,但我找不到更简单的方法来解释我的问题)请考虑以下类型:
import Data.Array
data UnitDir = Xp | Xm | Yp | Ym | Zp | Zm
deriving (Show, Eq, Ord, Enum, Bounded, Ix)
type Neighborhood a = Array UnitDir (Tree a)
data Tree a = Empty | Leaf a | Internal a (Neighborhood a)
deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)
显然,Tree可以定义Functor为如下实例:
instance Functor Tree where
fmap _ Empty = Empty
fmap f (Leaf x) = Leaf (f x)
fmap f (Internal x ts) = Internal (f x) $ …Run Code Online (Sandbox Code Playgroud) 请考虑GHCI的以下摘录:
Prelude> :t sum [1,2,3]
sum [1,2,3] :: Num a => a
Prelude> :t fromIntegral (length [1,2,3])
fromIntegral (length [1,2,3]) :: Num b => b
Prelude> :t sum [1,2,3] / fromIntegral (length [1,2,3])
sum [1,2,3] / fromIntegral (length [1,2,3]) :: Fractional a => a
Run Code Online (Sandbox Code Playgroud)
据我所知,这两个sum [1,2,3]和fromIntegral (length [1,2,3])的实例Num.令我困惑的是,为什么编译器将操作数转换为Fractional?我认为数字转换必须在Haskell中显式化.
谢谢!
haskell ×2
division ×1
foldable ×1
functor ×1
immutability ×1
iterator ×1
python ×1
set ×1
traversable ×1