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]] ]