小编hel*_*elq的帖子

插入换行符而不进入插入模式vim

我希望使用Shift-Enter和在vim中以普通模式插入换行符Ctrl-Enter.我试图从一些解决方案和混合解决方案,Vim的维基-插入新行而不进入插入模式,但Shift-EnterCtrl-Enter没有作出回应:

" put a new line before or after to this line
nnoremap <S-CR> m`o<Esc>``
nnoremap <C-CR> m`O<Esc>``

" reverse J command
nnoremap <C-J> vaW<Esc>Bi<CR><Esc>k:s/\s\+$//<CR>$
Run Code Online (Sandbox Code Playgroud)

vim newline keymapping key-bindings

60
推荐指数
3
解决办法
3万
查看次数

为什么在终端中执行getChar与在GHCi中执行它不同?

import Data.Char

main = do 
    c <- getChar
    if not $ isUpper c
        then do putChar $ toUpper c
                main
        else putChar '\n'
Run Code Online (Sandbox Code Playgroud)

在GHCi中加载和执行:

?> :l foo.hs
Ok, modules loaded: Main.
?> main
ñÑsSjJ44aAtTR
?>
Run Code Online (Sandbox Code Playgroud)

这会消耗一个字符.

但在终端:

[~ %]> runhaskell foo.hs
utar,hkñm-Rjaer 
UTAR,HKÑM-
[~ %]>
Run Code Online (Sandbox Code Playgroud)

它一次消耗一行.

为什么它的表现不同?

haskell

8
推荐指数
1
解决办法
714
查看次数

是否可以在运行时分配KnownNat?

我正在尝试(不成功)在运行时在haskell中创建一个"对象"*,其类型在运行时使用依赖类型定义.

我正在关注依赖类型的本教程,它们用于在运行时传递值的函数是一个函数,它接受Sing一个参数并使用模式匹配值Sing来获取运行时的数字.但是我无法访问任何Sing模式匹配.

我认为下面的代码可以工作,但我得到的实际上是非常令人失望的,编译器告诉我,n从类型定义来看randomNetwork,与n我在类型定义中捕获的不一样SNat.

{-# LANGUAGE
    ScopedTypeVariables, TemplateHaskell, TypeFamilies, GADTs, KindSignatures,
    TypeOperators, FlexibleContexts, RankNTypes, UndecidableInstances,
    FlexibleInstances, InstanceSigs, DefaultSignatures, DataKinds,
    RecordWildCards, StandaloneDeriving, MultiParamTypeClasses #-}

module Main where

-- some imports to make the code below main work
import Control.Monad.Random
import GHC.TypeLits
import Data.List

--import Grenade
import Data.Singletons
import Data.Singletons.TypeLits

main = do
  let sizeHidden = toSing (20 :: Integer) :: SomeSing Nat

  net0 <- case sizeHidden …
Run Code Online (Sandbox Code Playgroud)

haskell ghc dependent-type

8
推荐指数
1
解决办法
190
查看次数

TypeLits或Singletons:在运行时将`Integer`提升为`KnownNat`(`Nat`)

我发现有两种方法可以在运行时使用TypeLits和Proxy(Data.Proxy和GHC.TypeLits)或Singletons(Data.Singletons)在运行时将Integer提升为Nat(或KnownNat,我还没有得到区别). ).在下面的代码中,您可以看到如何使用这两种方法中的每一种:

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Main where

import Prelude hiding (replicate)
import Data.Proxy (Proxy(Proxy))
import Data.Monoid ((<>))
import Data.Singletons (SomeSing(..), toSing)
import GHC.TypeLits
import Data.Singletons.TypeLits
import Data.Vector.Sized (Vector, replicate)

main :: IO ()
main = playingWithTypes 8

playingWithTypes :: Integer -> IO ()
playingWithTypes nn = do

  case someNatVal nn of
    Just (SomeNat (proxy :: Proxy n)) -> do
--      let (num :: Integer) = natVal proxy
--      putStrLn $ …
Run Code Online (Sandbox Code Playgroud)

haskell types ghc dependent-type singleton-type

6
推荐指数
1
解决办法
588
查看次数

Haskell中的打印函数如何像python或scala一样?

我尝试在Haskell中打印函数只是为了好玩,就像这个例子:

{-# LANGUAGE FlexibleInstances #-}

instance Show (Int -> Bool) where
    show _ = "function: Int -> Bool"
Run Code Online (Sandbox Code Playgroud)

在GHCi中加载并运行和示例:

?> :l foo
[1 of 1] Compiling Main             ( foo.hs, interpreted )

foo.hs:2:1: Warning: Unrecognised pragma
Ok, modules loaded: Main.
?> (==2) :: Int -> Bool
function: Int -> Bool
Run Code Online (Sandbox Code Playgroud)

但是,我希望看到每个函数都在调用时自行打印.

haskell function

3
推荐指数
2
解决办法
1085
查看次数

从类型列表中获取常规列表

我已经找到了将a Nat转换为Integer使用的方法Proxy,natVal您可以在下面的代码中看到:

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Main where

import Data.Proxy (Proxy)
import Data.Monoid ((<>))
import GHC.TypeLits

main :: IO ()
main = do
  fromNat (undefined :: Proxy 5)

fromNat :: KnownNat n => Proxy n -> IO ()
fromNat proxy = do
  let (num :: Integer) = natVal proxy -- converting a Nat to an Integer
  putStrLn $ "Some num: " <> show num
Run Code Online (Sandbox Code Playgroud)

但是我无法想出将类型列表转换为常规列表的简单方法,下面的代码甚至不会键入check:

{-# LANGUAGE DataKinds …
Run Code Online (Sandbox Code Playgroud)

haskell types ghc dependent-type

3
推荐指数
1
解决办法
50
查看次数