Yachi Wataru
@Yachi Wataru has joined the channel
cabal-rangefinder というツールで出来たんですが、メンテ止まってて新しいcabalだと動かなそうですmv <- v が実行される前にLeft eを返す必要がありますdata type,すなわち代数的データ型の意味で使われていることないです? https://gitlab.haskell.org/ghc/ghc/wikis/unlifted-data-types とかその例だと思うんですよね.v2-install --lib package や v2-repl -b package でできました。print 関数をセットできるRecord型を作ろうとすると、Impredicative Typeを作ってしまい、コンパイルが通せません。
data Env m = Env
{ print :: forall a. Show a => a -> m ()
, otherFields :: m Int
}
print を String -> m () に変えるとか、いろいろ回避策は考えられると思うのですが、どんな方法がいいと思いますか?
Prelude> :set -XRankNTypes
Prelude> data Env m = Env { print :: forall a. Show a => a -> m (), otherFields :: m Int }
Prelude> :type Env
Env :: (forall a. Show a => a -> m ()) -> m Int -> Env m
Prelude> x = Env Prelude.print (return 0)
Prelude> :info x
x :: Env IO -- Defined at <interactive>:10:1
[[2],[2]Listed: Listed.hs:(10,1)-(11,55): Non-exhaustive patterns in function secmap
module Listed(main) where
main :: IO ()
main = do
print $ secmap (+1) [[1],[1]]
print 1
secmap :: (a-> b) -> [[a]] -> [[b]]
secmap f [[]] = [[]]
secmap f ((x : xs):xxs) = ((f x:map f xs):secmap f xxs)
[[][]]にマッチしないからですかね?[ map (+1) xs | xs <- [[1], [1]] ]
[ [ x + 1 | x <- xs] | xs <- [[1], [1]] ]